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.auto.value.AutoValue;
35 
36 @AutoValue
37 abstract class LandingActivityBridgeImpl implements LandingActivityBridge {
38 
getUtils()39     abstract Utils getUtils();
getParams()40     abstract ProvisioningParams getParams();
getBridgeCallbacks()41     abstract LandingActivityBridgeCallbacks getBridgeCallbacks();
getAccessibilityContextMenuMaker()42     abstract AccessibilityContextMenuMaker getAccessibilityContextMenuMaker();
getInitializeLayoutParamsConsumer()43     abstract InitializeLayoutConsumerHandler getInitializeLayoutParamsConsumer();
44 
45     @Override
initiateUi(Activity activity)46     public void initiateUi(Activity activity) {
47         int headerResId = R.string.brand_screen_header;
48         int titleResId = R.string.setup_device_progress;
49 
50         if (shouldShowAccountManagementDisclaimer(
51                 getParams().initiatorRequestedProvisioningModes, getUtils())) {
52             headerResId = R.string.account_management_disclaimer_header;
53         }
54 
55         CustomizationParams customizationParams =
56                 CustomizationParams.createInstance(getParams(), activity, getUtils());
57         getInitializeLayoutParamsConsumer()
58                 .initializeLayoutParams(R.layout.landing_screen, headerResId, customizationParams);
59         activity.setTitle(titleResId);
60 
61         setupSubtitleText(activity, getParams(), customizationParams);
62 
63         GlifLayout layout = activity.findViewById(R.id.setup_wizard_layout);
64         Utils.addNextButton(layout, v -> getBridgeCallbacks().onNextButtonClicked());
65     }
66 
setupSubtitleText(Activity activity, ProvisioningParams params, CustomizationParams customizationParams)67     private void setupSubtitleText(Activity activity, ProvisioningParams params,
68             CustomizationParams customizationParams) {
69         TextView info = activity.findViewById(R.id.sud_layout_subtitle);
70         info.setVisibility(View.VISIBLE);
71         if (shouldShowAccountManagementDisclaimer(
72                 params.initiatorRequestedProvisioningModes, getUtils())) {
73             info.setText(R.string.account_management_disclaimer_subheader);
74         } else {
75             handleSupportUrl(activity, customizationParams, info, getUtils());
76         }
77     }
78 
shouldShowAccountManagementDisclaimer(int provisioningModes, Utils utils)79     private boolean shouldShowAccountManagementDisclaimer(int provisioningModes, Utils  utils) {
80         return utils.containsBinaryFlags(provisioningModes, FLAG_SUPPORTED_MODES_PERSONALLY_OWNED);
81     }
82 
handleSupportUrl( Context context, CustomizationParams customizationParams, TextView info, Utils utils)83     private void handleSupportUrl(
84             Context context,
85             CustomizationParams customizationParams,
86             TextView info,
87             Utils utils) {
88         String deviceProvider = context.getString(R.string.organization_admin);
89         String contactDeviceProvider =
90                 context.getString(R.string.contact_device_provider, deviceProvider);
91         utils.handleSupportUrl(
92                 context,
93                 customizationParams,
94                 getAccessibilityContextMenuMaker(),
95                 info,
96                 deviceProvider,
97                 contactDeviceProvider, intent ->
98                         getBridgeCallbacks().onContactYourItAdminClicked(intent));
99     }
100 
builder()101     static Builder builder() {
102         return new AutoValue_LandingActivityBridgeImpl.Builder();
103     }
104 
105     @AutoValue.Builder
106     abstract static class Builder {
setUtils(Utils utils)107         abstract Builder setUtils(Utils utils);
setParams(ProvisioningParams params)108         abstract Builder setParams(ProvisioningParams params);
setInitializeLayoutParamsConsumer( InitializeLayoutConsumerHandler initializeLayoutParamsConsumer)109         abstract Builder setInitializeLayoutParamsConsumer(
110                 InitializeLayoutConsumerHandler initializeLayoutParamsConsumer);
setBridgeCallbacks(LandingActivityBridgeCallbacks callbacks)111         abstract Builder setBridgeCallbacks(LandingActivityBridgeCallbacks callbacks);
setAccessibilityContextMenuMaker( AccessibilityContextMenuMaker accessibilityContextMenuMaker)112         abstract Builder setAccessibilityContextMenuMaker(
113                 AccessibilityContextMenuMaker accessibilityContextMenuMaker);
build()114         abstract LandingActivityBridgeImpl build();
115     }
116 }
117