• 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.finalization;
18 
19 import static com.android.managedprovisioning.ManagedProvisioningScreens.RETRY_LAUNCH;
20 
21 import android.app.Activity;
22 import android.content.Intent;
23 import android.os.Bundle;
24 
25 import com.android.managedprovisioning.ManagedProvisioningBaseApplication;
26 import com.android.managedprovisioning.ManagedProvisioningScreens;
27 import com.android.managedprovisioning.common.DefaultFeatureFlagChecker;
28 import com.android.managedprovisioning.common.DefaultPackageInstallChecker;
29 import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper;
30 import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper.DefaultResolveIntentChecker;
31 import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper.DefaultRoleHolderStubChecker;
32 import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences;
33 import com.android.managedprovisioning.common.RetryLaunchActivity;
34 import com.android.managedprovisioning.common.RoleHolderProvider;
35 import com.android.managedprovisioning.common.SharedPreferences;
36 import com.android.managedprovisioning.common.TransitionHelper;
37 import com.android.managedprovisioning.common.Utils;
38 
39 /**
40  * A UX-less {@link Activity} which is meant to delegate provisioning finalization to either
41  * the platform-provided finalization or the device management role holder finalization.
42  */
43 public class FinalizationForwarderActivity extends Activity implements
44         FinalizationForwarderController.Ui {
45     private static final int START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE = 1;
46     private static final int START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE = 2;
47 
48     private final TransitionHelper mTransitionHelper;
49     private FinalizationForwarderController mFinalizationController;
50 
FinalizationForwarderActivity()51     public FinalizationForwarderActivity() {
52         mTransitionHelper = new TransitionHelper();
53     }
54 
55     @Override
onCreate(Bundle savedInstanceState)56     protected void onCreate(Bundle savedInstanceState) {
57         mTransitionHelper.applyContentScreenTransitions(this);
58         super.onCreate(savedInstanceState);
59         mFinalizationController = createFinalizationController();
60         if (savedInstanceState == null) {
61             mFinalizationController.forwardFinalization(this);
62         }
63     }
64 
65     @Override
onActivityResult(int requestCode, int resultCode, Intent data)66     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
67         switch (requestCode) {
68             case START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE:
69             case START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE:
70                 setResult(resultCode);
71                 mTransitionHelper.finishActivity(this);
72                 break;
73         }
74     }
75 
76     @Override
startPlatformProvidedProvisioningFinalization()77     public void startPlatformProvidedProvisioningFinalization() {
78         mTransitionHelper.startActivityForResultWithTransition(
79                 this,
80                 mFinalizationController.createPlatformProvidedProvisioningFinalizationIntent(
81                         this, getIntent()),
82                 START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE);
83     }
84 
85     @Override
startRoleHolderFinalization()86     public void startRoleHolderFinalization() {
87         Intent intent = new Intent(this, getActivityForScreen(RETRY_LAUNCH));
88         intent.putExtra(
89                 RetryLaunchActivity.EXTRA_INTENT_TO_LAUNCH,
90                 mFinalizationController.createRoleHolderFinalizationIntent(this, getIntent()));
91         mTransitionHelper.startActivityForResultWithTransition(
92                 this,
93                 intent,
94                 START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE);
95     }
96 
getActivityForScreen(ManagedProvisioningScreens screen)97     protected Class<? extends Activity> getActivityForScreen(ManagedProvisioningScreens screen) {
98         return getBaseApplication().getActivityClassForScreen(screen);
99     }
100 
getBaseApplication()101     private ManagedProvisioningBaseApplication getBaseApplication() {
102         return ((ManagedProvisioningBaseApplication) getApplication());
103     }
104 
105 
createFinalizationController()106     private FinalizationForwarderController createFinalizationController() {
107         DeviceManagementRoleHolderHelper roleHolderHelper = new DeviceManagementRoleHolderHelper(
108                 RoleHolderProvider.DEFAULT.getPackageName(this),
109                 new DefaultPackageInstallChecker(getPackageManager(), new Utils()),
110                 new DefaultResolveIntentChecker(),
111                 new DefaultRoleHolderStubChecker(),
112                 new DefaultFeatureFlagChecker(getContentResolver()));
113         SharedPreferences sharedPreferences =
114                 new ManagedProvisioningSharedPreferences(getApplicationContext());
115         return new FinalizationForwarderController(
116                 roleHolderHelper,
117                 /* ui= */ this,
118                 sharedPreferences,
119                 ((ManagedProvisioningBaseApplication) getApplication()).getScreenManager());
120     }
121 }
122