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 package com.android.managedprovisioning.provisioning;
17 
18 import android.annotation.Nullable;
19 import android.app.Activity;
20 import android.content.Intent;
21 import android.os.Bundle;
22 
23 import com.android.internal.annotations.VisibleForTesting;
24 import com.android.managedprovisioning.R;
25 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
26 import com.android.managedprovisioning.common.CarSetupWizardLayoutHelper;
27 import com.android.managedprovisioning.common.SettingsFacade;
28 import com.android.managedprovisioning.common.ThemeHelper;
29 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
30 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
31 import com.android.managedprovisioning.common.Utils;
32 import com.android.managedprovisioning.model.ProvisioningParams;
33 
34 /**
35  * The first activity shown during provisioning.
36  */
37 public final class CarLandingActivity extends LandingActivity {
38 
39     private final AccessibilityContextMenuMaker mContextMenuMaker;
40     private ProvisioningParams mParams;
41     private CarSetupWizardLayoutHelper mLayoutHelper;
42 
CarLandingActivity()43     public CarLandingActivity() {
44         this(new Utils(), /* contextMenuMaker= */ null, new SettingsFacade(),
45                 new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()));
46     }
47 
48     @VisibleForTesting
CarLandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker, SettingsFacade settingsFacade, ThemeHelper themeHelper)49     CarLandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker,
50             SettingsFacade settingsFacade, ThemeHelper themeHelper) {
51         super(utils, contextMenuMaker, settingsFacade, themeHelper);
52         mContextMenuMaker = contextMenuMaker != null
53                 ? contextMenuMaker
54                 : new AccessibilityContextMenuMaker(this);
55     }
56 
57     @Override
onCreate(Bundle savedInstanceState)58     protected void onCreate(Bundle savedInstanceState) {
59         mParams = getIntent().getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS);
60         mLayoutHelper = new CarSetupWizardLayoutHelper(this);
61         super.onCreate(savedInstanceState);
62     }
63 
64     @Override
createBridge()65     protected LandingActivityBridge createBridge() {
66         return CarLandingActivityBridgeImpl.builder()
67                 .setBridgeCallbacks(createBridgeCallbacks())
68                 .setParams(mParams)
69                 .setInitializeLayoutParamsConsumer(CarLandingActivity.this::initializeLayoutParams)
70                 .setUtils(mUtils)
71                 .setLayoutHelper(mLayoutHelper)
72                 .setAccessibilityContextMenuMaker(mContextMenuMaker)
73                 .build();
74     }
75 
createBridgeCallbacks()76     private LandingActivityBridgeCallbacks createBridgeCallbacks() {
77         return new LandingActivityBridgeCallbacks() {
78             @Override
79             public void onNextButtonClicked() {
80                 CarLandingActivity.this.onNextButtonClicked();
81             }
82 
83             @Override
84             public void onContactYourItAdminClicked(Intent webIntent) {
85                 getTransitionHelper().startActivityWithTransition(
86                         CarLandingActivity.this, webIntent);
87             }
88         };
89     }
90 
91     // For AAOS, admin integrated should be run by default. Therefore,
92     // ADMIN_INTEGRATED_PREPARE screen will be skipped as compared to on mobile.
93     private void onNextButtonClicked() {
94         setResult(Activity.RESULT_OK);
95         getTransitionHelper().finishActivity(this);
96     }
97 
98     /**
99      * Overrides {@code initializeLayoutParams} in SetupGlifLayoutActivity to set layout as
100      * {@code CarSetupWizardLayout}
101      */
102     @Override
103     protected void initializeLayoutParams(
104             int layoutResourceId, @Nullable Integer headerResourceId) {
105         CarSetupWizardLayoutHelper layoutHelper = mLayoutHelper;
106         layoutHelper.setBaseLayout(
107                 /* mainLayoutId= */ layoutResourceId,
108                 /* subLayoutId= */ R.layout.empty_layout,
109                 /* isDoubleColumnAllowed= */ false);
110     }
111 }
112