| /* |
| * Copyright (C) 2021 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.managedprovisioning.finalization; |
| |
| import static com.android.managedprovisioning.ManagedProvisioningScreens.RETRY_LAUNCH; |
| |
| import android.app.Activity; |
| import android.content.Intent; |
| import android.os.Bundle; |
| |
| import com.android.managedprovisioning.ManagedProvisioningBaseApplication; |
| import com.android.managedprovisioning.ManagedProvisioningScreens; |
| import com.android.managedprovisioning.common.DefaultPackageInstallChecker; |
| import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper; |
| import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper.DefaultResolveIntentChecker; |
| import com.android.managedprovisioning.common.DeviceManagementRoleHolderHelper.DefaultRoleHolderStubChecker; |
| import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences; |
| import com.android.managedprovisioning.common.RetryLaunchActivity; |
| import com.android.managedprovisioning.common.RoleHolderProvider; |
| import com.android.managedprovisioning.common.SharedPreferences; |
| import com.android.managedprovisioning.common.TransitionHelper; |
| import com.android.managedprovisioning.common.Utils; |
| |
| /** |
| * A UX-less {@link Activity} which is meant to delegate provisioning finalization to either |
| * the platform-provided finalization or the device management role holder finalization. |
| */ |
| public class FinalizationForwarderActivity extends Activity implements |
| FinalizationForwarderController.Ui { |
| private static final int START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE = 1; |
| private static final int START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE = 2; |
| |
| private final TransitionHelper mTransitionHelper; |
| private FinalizationForwarderController mFinalizationController; |
| |
| public FinalizationForwarderActivity() { |
| mTransitionHelper = new TransitionHelper(); |
| } |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| mTransitionHelper.applyContentScreenTransitions(this); |
| super.onCreate(savedInstanceState); |
| mFinalizationController = createFinalizationController(); |
| mFinalizationController.forwardFinalization(this); |
| } |
| |
| @Override |
| protected void onActivityResult(int requestCode, int resultCode, Intent data) { |
| switch (requestCode) { |
| case START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE: |
| case START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE: |
| setResult(resultCode); |
| mTransitionHelper.finishActivity(this); |
| break; |
| } |
| } |
| |
| @Override |
| public void startPlatformProvidedProvisioningFinalization() { |
| mTransitionHelper.startActivityForResultWithTransition( |
| this, |
| mFinalizationController.createPlatformProvidedProvisioningFinalizationIntent(this), |
| START_PLATFORM_PROVIDED_PROVISIONING_FINALIZATION_REQUEST_CODE); |
| } |
| |
| @Override |
| public void startRoleHolderFinalization() { |
| Intent intent = new Intent(this, getActivityForScreen(RETRY_LAUNCH)); |
| intent.putExtra( |
| RetryLaunchActivity.EXTRA_INTENT_TO_LAUNCH, |
| mFinalizationController.createRoleHolderFinalizationIntent(this)); |
| mTransitionHelper.startActivityForResultWithTransition( |
| this, |
| intent, |
| START_DEVICE_MANAGEMENT_ROLE_HOLDER_FINALIZATION_REQUEST_CODE); |
| } |
| |
| protected Class<? extends Activity> getActivityForScreen(ManagedProvisioningScreens screen) { |
| return getBaseApplication().getActivityClassForScreen(screen); |
| } |
| |
| private ManagedProvisioningBaseApplication getBaseApplication() { |
| return ((ManagedProvisioningBaseApplication) getApplication()); |
| } |
| |
| |
| private FinalizationForwarderController createFinalizationController() { |
| DeviceManagementRoleHolderHelper roleHolderHelper = new DeviceManagementRoleHolderHelper( |
| RoleHolderProvider.DEFAULT.getPackageName(this), |
| new DefaultPackageInstallChecker(new Utils()), |
| new DefaultResolveIntentChecker(), |
| new DefaultRoleHolderStubChecker()); |
| SharedPreferences sharedPreferences = |
| new ManagedProvisioningSharedPreferences(getApplicationContext()); |
| return new FinalizationForwarderController( |
| roleHolderHelper, |
| /* ui= */ this, |
| sharedPreferences); |
| } |
| } |