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