• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.managedprovisioning.provisioning;
18 
19 import static android.app.admin.DevicePolicyManager.FLAG_SUPPORTED_MODES_PERSONALLY_OWNED;
20 
21 import android.app.Activity;
22 import android.content.Context;
23 import android.view.View;
24 import android.widget.TextView;
25 
26 import com.android.managedprovisioning.R;
27 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
28 import com.android.managedprovisioning.common.InitializeLayoutConsumerHandler;
29 import com.android.managedprovisioning.common.Utils;
30 import com.android.managedprovisioning.model.CustomizationParams;
31 import com.android.managedprovisioning.model.ProvisioningParams;
32 
33 import com.google.android.setupdesign.GlifLayout;
34 import com.google.android.setupdesign.util.DeviceHelper;
35 import com.google.auto.value.AutoValue;
36 
37 @AutoValue
38 abstract class LandingActivityBridgeImpl implements LandingActivityBridge {
39 
getUtils()40     abstract Utils getUtils();
getParams()41     abstract ProvisioningParams getParams();
getBridgeCallbacks()42     abstract LandingActivityBridgeCallbacks getBridgeCallbacks();
getAccessibilityContextMenuMaker()43     abstract AccessibilityContextMenuMaker getAccessibilityContextMenuMaker();
getInitializeLayoutParamsConsumer()44     abstract InitializeLayoutConsumerHandler getInitializeLayoutParamsConsumer();
45 
46     @Override
initiateUi(Activity activity)47     public void initiateUi(Activity activity) {
48         int headerResId = R.string.brand_screen_header;
49         CharSequence deviceName = DeviceHelper.getDeviceName(activity.getApplicationContext());
50         String title = activity.getString(R.string.setup_device_progress, deviceName);
51 
52         if (shouldShowAccountManagementDisclaimer(
53                 getParams().initiatorRequestedProvisioningModes, getUtils())) {
54             headerResId = R.string.account_management_disclaimer_header;
55         }
56 
57         CustomizationParams customizationParams =
58                 CustomizationParams.createInstance(getParams(), activity, getUtils());
59         getInitializeLayoutParamsConsumer()
60                 .initializeLayoutParams(R.layout.landing_screen, headerResId);
61         activity.setTitle(title);
62 
63         setupSubtitleText(activity, getParams(), customizationParams);
64 
65         GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout);
66         Utils.addNextButton(layout, v -> getBridgeCallbacks().onNextButtonClicked());
67     }
68 
setupSubtitleText(Activity activity, ProvisioningParams params, CustomizationParams customizationParams)69     private void setupSubtitleText(Activity activity, ProvisioningParams params,
70             CustomizationParams customizationParams) {
71         TextView info = activity.findViewById(
72                 com.google.android.setupdesign.R.id.sud_layout_subtitle);
73         info.setVisibility(View.VISIBLE);
74         if (shouldShowAccountManagementDisclaimer(
75                 params.initiatorRequestedProvisioningModes, getUtils())) {
76             info.setText(R.string.account_management_disclaimer_subheader);
77         } else {
78             handleSupportUrl(activity, customizationParams, info, getUtils());
79         }
80     }
81 
shouldShowAccountManagementDisclaimer(int provisioningModes, Utils utils)82     private boolean shouldShowAccountManagementDisclaimer(int provisioningModes, Utils  utils) {
83         return utils.containsBinaryFlags(provisioningModes, FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
84     }
85 
handleSupportUrl( Context context, CustomizationParams customizationParams, TextView info, Utils utils)86     private void handleSupportUrl(
87             Context context,
88             CustomizationParams customizationParams,
89             TextView info,
90             Utils utils) {
91         String deviceProvider = context.getString(R.string.organization_admin);
92         String contactDeviceProvider =
93                 context.getString(R.string.contact_device_provider, deviceProvider);
94         utils.handleSupportUrl(
95                 context,
96                 customizationParams,
97                 getAccessibilityContextMenuMaker(),
98                 info,
99                 deviceProvider,
100                 contactDeviceProvider, intent ->
101                         getBridgeCallbacks().onContactYourItAdminClicked(intent));
102     }
103 
builder()104     static Builder builder() {
105         return new AutoValue_LandingActivityBridgeImpl.Builder();
106     }
107 
108     @AutoValue.Builder
109     abstract static class Builder {
setUtils(Utils utils)110         abstract Builder setUtils(Utils utils);
setParams(ProvisioningParams params)111         abstract Builder setParams(ProvisioningParams params);
setInitializeLayoutParamsConsumer( InitializeLayoutConsumerHandler initializeLayoutParamsConsumer)112         abstract Builder setInitializeLayoutParamsConsumer(
113                 InitializeLayoutConsumerHandler initializeLayoutParamsConsumer);
setBridgeCallbacks(LandingActivityBridgeCallbacks callbacks)114         abstract Builder setBridgeCallbacks(LandingActivityBridgeCallbacks callbacks);
setAccessibilityContextMenuMaker( AccessibilityContextMenuMaker accessibilityContextMenuMaker)115         abstract Builder setAccessibilityContextMenuMaker(
116                 AccessibilityContextMenuMaker accessibilityContextMenuMaker);
build()117         abstract LandingActivityBridgeImpl build();
118     }
119 }
120