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 package com.android.managedprovisioning.provisioning;
17 
18 import android.app.Activity;
19 import android.content.Intent;
20 import android.os.Bundle;
21 
22 import com.android.internal.annotations.VisibleForTesting;
23 import com.android.managedprovisioning.ManagedProvisioningScreens;
24 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
25 import com.android.managedprovisioning.common.SettingsFacade;
26 import com.android.managedprovisioning.common.SetupGlifLayoutActivity;
27 import com.android.managedprovisioning.common.ThemeHelper;
28 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
29 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
30 import com.android.managedprovisioning.common.Utils;
31 import com.android.managedprovisioning.model.ProvisioningParams;
32 
33 import com.google.android.setupcompat.util.WizardManagerHelper;
34 
35 /**
36  * The first activity shown during provisioning.
37  */
38 public class LandingActivity extends SetupGlifLayoutActivity {
39     private static final int ADMIN_INTEGRATED_FLOW_PREPARE_REQUEST_CODE = 1;
40     private final AccessibilityContextMenuMaker mContextMenuMaker;
41     private LandingActivityBridge mBridge;
42     private ProvisioningParams mParams;
43 
LandingActivity()44     public LandingActivity() {
45         this(new Utils(), /* contextMenuMaker */ null, new SettingsFacade(),
46                 new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
47     }
48 
49     @VisibleForTesting
LandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker, SettingsFacade settingsFacade, ThemeHelper themeHelper)50     LandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker,
51             SettingsFacade settingsFacade, ThemeHelper themeHelper) {
52         super(utils, settingsFacade, themeHelper);
53         mContextMenuMaker = contextMenuMaker != null
54                 ? contextMenuMaker
55                 : new AccessibilityContextMenuMaker(this);
56     }
57 
58     @Override
onCreate(Bundle savedInstanceState)59     protected void onCreate(Bundle savedInstanceState) {
60         super.onCreate(savedInstanceState);
61         mParams = getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS);
62         mBridge = createBridge();
63         mBridge.initiateUi(this);
64     }
65 
createBridge()66     protected LandingActivityBridge createBridge() {
67         return LandingActivityBridgeImpl.builder()
68                 .setBridgeCallbacks(createBridgeCallbacks())
69                 .setParams(mParams)
70                 .setInitializeLayoutParamsConsumer(LandingActivity.this::initializeLayoutParams)
71                 .setUtils(mUtils)
72                 .setAccessibilityContextMenuMaker(mContextMenuMaker)
73                 .build();
74     }
75 
createBridgeCallbacks()76     private LandingActivityBridgeCallbacks createBridgeCallbacks() {
77         return new LandingActivityBridgeCallbacks() {
78             @Override
79             public void onNextButtonClicked() {
80                 LandingActivity.this.onNextButtonClicked();
81             }
82 
83             @Override
84             public void onContactYourItAdminClicked(Intent webIntent) {
85                 getTransitionHelper().startActivityWithTransition(
86                         LandingActivity.this, webIntent);
87             }
88         };
89     }
90 
91     private void onNextButtonClicked() {
92         if (AdminIntegratedFlowPrepareActivity
93                 .shouldRunPrepareActivity(mUtils, this, mParams)) {
94             Intent intent = new Intent(this,
95                     getActivityForScreen(ManagedProvisioningScreens.ADMIN_INTEGRATED_PREPARE));
96             WizardManagerHelper.copyWizardManagerExtras(getIntent(), intent);
97             intent.putExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS, mParams);
98             getTransitionHelper().startActivityForResultWithTransition(
99                     this, intent, ADMIN_INTEGRATED_FLOW_PREPARE_REQUEST_CODE);
100         } else {
101             setResult(Activity.RESULT_OK);
102             getTransitionHelper().finishActivity(this);
103         }
104     }
105 
106     @Override
107     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
108         if (requestCode == ADMIN_INTEGRATED_FLOW_PREPARE_REQUEST_CODE) {
109             setResult(resultCode);
110             getTransitionHelper().finishActivity(this);
111         } else {
112             super.onActivityResult(requestCode, resultCode, data);
113         }
114     }
115 }
116