• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2019, 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 android.app.Activity;
20 import android.content.Context;
21 import android.os.Bundle;
22 
23 import androidx.annotation.VisibleForTesting;
24 
25 import com.android.managedprovisioning.R;
26 import com.android.managedprovisioning.common.ProvisionLogger;
27 import com.android.managedprovisioning.common.SettingsFacade;
28 import com.android.managedprovisioning.common.ThemeHelper;
29 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
30 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
31 import com.android.managedprovisioning.common.Utils;
32 import com.android.managedprovisioning.model.ProvisioningParams;
33 
34 import com.google.android.setupcompat.logging.ScreenKey;
35 import com.google.android.setupcompat.logging.SetupMetric;
36 import com.google.android.setupcompat.logging.SetupMetricsLogger;
37 import com.google.android.setupdesign.util.DeviceHelper;
38 
39 /**
40  * Progress activity shown whilst network setup, downloading, verifying and installing the
41  * admin package is ongoing.
42  *
43  * <p>This activity registers for updates of the provisioning process from the
44  * {@link AdminIntegratedFlowPrepareManager}. It shows progress updates as provisioning
45  * progresses and handles showing of cancel and error dialogs.</p>
46  */
47 public class AdminIntegratedFlowPrepareActivity extends AbstractProvisioningActivity {
48 
49     private static final String SETUP_METRIC_ADMIN_INTEGRATED_SCREEN_NAME =
50             "ShowAdminIntegratedFlowScreen";
51     private AdminIntegratedFlowPrepareManager mProvisioningManager;
52 
AdminIntegratedFlowPrepareActivity()53     public AdminIntegratedFlowPrepareActivity() {
54         this(new Utils(), new SettingsFacade(),
55                 new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
56     }
57 
shouldRunPrepareActivity( Utils utils, Context context, ProvisioningParams params)58     public static boolean shouldRunPrepareActivity(
59             Utils utils, Context context, ProvisioningParams params) {
60         // TODO(b/177849035): Remove NFC-specific logic
61         if (params.isNfc) {
62             return false;
63         }
64         if (params.wifiInfo != null) {
65             return true;
66         }
67         if (params.useMobileData) {
68             return true;
69         }
70         if (params.deviceAdminDownloadInfo != null) {
71             // Only prepare if a download is actually required
72             if (utils.packageRequiresUpdate(
73                     params.inferDeviceAdminPackageName(),
74                     params.deviceAdminDownloadInfo.minVersion,
75                     context)) {
76                 return true;
77             }
78         }
79         return false;
80     }
81 
82     @VisibleForTesting
AdminIntegratedFlowPrepareActivity( Utils utils, SettingsFacade settingsFacade, ThemeHelper themeHelper)83     protected AdminIntegratedFlowPrepareActivity(
84             Utils utils, SettingsFacade settingsFacade, ThemeHelper themeHelper) {
85         super(utils, settingsFacade, themeHelper);
86     }
87 
88     @Override
onCreate(Bundle savedInstanceState)89     protected void onCreate(Bundle savedInstanceState) {
90         super.onCreate(savedInstanceState);
91         setupMetricScreenName = SETUP_METRIC_ADMIN_INTEGRATED_SCREEN_NAME;
92         mScreenKey = ScreenKey.of(setupMetricScreenName, this);
93         SetupMetricsLogger.logMetrics(this, mScreenKey,
94                 SetupMetric.ofImpression(setupMetricScreenName));
95         initializeUi();
96     }
97 
98     @Override
getProvisioningManager()99     protected ProvisioningManagerInterface getProvisioningManager() {
100         if (mProvisioningManager == null) {
101             mProvisioningManager = AdminIntegratedFlowPrepareManager.getInstance(this);
102         }
103         return mProvisioningManager;
104 
105     }
106 
107     @Override
preFinalizationCompleted()108     public void preFinalizationCompleted() {
109         ProvisionLogger.logi("AdminIntegratedFlowPrepareActivity pre-finalization completed");
110         setResult(Activity.RESULT_OK);
111         this.overridePendingTransition(R.anim.sud_slide_next_in, R.anim.sud_slide_next_out);
112         this.finish();
113     }
114 
115     @Override
decideCancelProvisioningDialog()116     protected void decideCancelProvisioningDialog() {
117         if (getUtils().isDeviceOwnerAction(mParams.provisioningAction)
118                 || getUtils().isOrganizationOwnedAllowed(mParams)) {
119             showCancelProvisioningDialog(/* resetRequired= */ true);
120         } else {
121             showCancelProvisioningDialog(/* resetRequired= */ false);
122         }
123     }
124 
125 
initializeUi()126     private void initializeUi() {
127         final int headerResId = R.string.downloading_administrator_header;
128         CharSequence deviceName = DeviceHelper.getDeviceName(getApplicationContext());
129         final String title = getString(R.string.setup_device_progress, deviceName);
130         initializeLayoutParams(R.layout.empty_loading_layout, headerResId);
131         setTitle(title);
132     }
133 
134     @Override
isWaitingScreen()135     protected boolean isWaitingScreen() {
136         return true;
137     }
138 }
139