/* * Copyright 2019, 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 android.content.Intent; import com.android.managedprovisioning.analytics.MetricsWriterFactory; import com.android.managedprovisioning.analytics.ProvisioningAnalyticsTracker; import com.android.managedprovisioning.common.ManagedProvisioningSharedPreferences; import com.android.managedprovisioning.common.ProvisionLogger; import com.android.managedprovisioning.common.SettingsFacade; import com.android.managedprovisioning.common.TransitionHelper; /** * This class is used to start the Device Policy Controller app while the Setup Wizard is still * running. It listens for a result from any child activity that is started, and returns its own * result code when all child activities have completed. */ public class FinalizationInsideSuwActivity extends FinalizationActivityBase { private static final int DPC_SETUP_REQUEST_CODE = 1; private static final int FINAL_SCREEN_REQUEST_CODE = 2; public FinalizationInsideSuwActivity() { super(new TransitionHelper()); } @Override protected FinalizationController createFinalizationController() { return new FinalizationController(this, new FinalizationInsideSuwControllerLogic(this)); } @Override protected void onFinalizationCompletedWithChildActivityLaunched() { // Don't commit finalized state until child activity completes. } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { // We use FINAL_SCREEN_REQUEST_CODE in the admin-integrated flow, because the DPC has // already run earlier, so we don't run it again during finalization. Instead, we show // a generic UI indicating that provisioning is done. In other flows, we start up the // DPC during finalization, using DPC_SETUP_REQUEST_CODE. case DPC_SETUP_REQUEST_CODE: logDpcSetupCompleted(resultCode); // Fall through; code below this applies to both request codes case FINAL_SCREEN_REQUEST_CODE: ProvisionLogger.logi("onActivityResult: received " + "requestCode = " + requestCode + ", resultCode = " + resultCode); // Inside of SUW, if this activity returns RESULT_CANCELED, we will go back to // the previous SUW action. Don't finalize the user provisioning state in that // case, so that we run finalization again when the user goes forward again in SUW. if (resultCode != RESULT_CANCELED) { getFinalizationController().commitFinalizedState(); } setResult(resultCode); getTransitionHelper().finishActivity(this); break; default: ProvisionLogger.logw("onActivityResult: Unknown request code: " + requestCode); break; } } private void logDpcSetupCompleted(int resultCode) { final ProvisioningAnalyticsTracker provisioningAnalyticsTracker = new ProvisioningAnalyticsTracker( MetricsWriterFactory.getMetricsWriter(this, new SettingsFacade()), new ManagedProvisioningSharedPreferences(this)); provisioningAnalyticsTracker.logDpcSetupCompleted(this, resultCode); } }