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