1 /*
2  * Copyright (C) 2020 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.provisioning;
18 
19 import static java.util.Objects.requireNonNull;
20 
21 import android.annotation.DrawableRes;
22 import android.annotation.StringRes;
23 import android.os.Bundle;
24 import android.view.ViewGroup;
25 import android.widget.ImageView;
26 import android.widget.LinearLayout;
27 import android.widget.TextView;
28 
29 import com.android.internal.annotations.VisibleForTesting;
30 import com.android.managedprovisioning.R;
31 import com.android.managedprovisioning.common.AccessibilityContextMenuMaker;
32 import com.android.managedprovisioning.common.SettingsFacade;
33 import com.android.managedprovisioning.common.SetupGlifLayoutActivity;
34 import com.android.managedprovisioning.common.StylerHelper;
35 import com.android.managedprovisioning.common.ThemeHelper;
36 import com.android.managedprovisioning.common.ThemeHelper.DefaultNightModeChecker;
37 import com.android.managedprovisioning.common.ThemeHelper.DefaultSetupWizardBridge;
38 import com.android.managedprovisioning.common.Utils;
39 import com.android.managedprovisioning.model.ProvisioningParams;
40 
41 import com.google.android.setupcompat.template.FooterBarMixin;
42 import com.google.android.setupcompat.template.FooterButton;
43 import com.google.android.setupdesign.GlifLayout;
44 
45 import java.util.Objects;
46 
47 /**
48  * This is the first activity the user will see during financed device provisioning.
49  */
50 public final class FinancedDeviceLandingActivity extends SetupGlifLayoutActivity {
51 
52     private final AccessibilityContextMenuMaker mContextMenuMaker;
53     private final StylerHelper mStylerHelper;
54 
FinancedDeviceLandingActivity()55     public FinancedDeviceLandingActivity() {
56         this(new Utils(), /* contextMenuMaker= */null, new SettingsFacade(),
57                 new ThemeHelper(new DefaultNightModeChecker(), new DefaultSetupWizardBridge()),
58                 new StylerHelper());
59     }
60 
61     @VisibleForTesting
FinancedDeviceLandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker, SettingsFacade settingsFacade, ThemeHelper themeHelper, StylerHelper stylerHelper)62     FinancedDeviceLandingActivity(Utils utils, AccessibilityContextMenuMaker contextMenuMaker,
63             SettingsFacade settingsFacade, ThemeHelper themeHelper, StylerHelper stylerHelper) {
64         super(utils, settingsFacade, themeHelper);
65         mContextMenuMaker = contextMenuMaker != null
66                 ? contextMenuMaker
67                 : new AccessibilityContextMenuMaker(this);
68         mStylerHelper = requireNonNull(stylerHelper);
69     }
70 
71     @Override
onCreate(Bundle savedInstanceState)72     protected void onCreate(Bundle savedInstanceState) {
73         super.onCreate(savedInstanceState);
74         final ProvisioningParams params = getIntent()
75                 .getParcelableExtra(ProvisioningParams.EXTRA_PROVISIONING_PARAMS);
76         initializeUi(params);
77     }
78 
initializeUi(ProvisioningParams params)79     private void initializeUi(ProvisioningParams params) {
80         setContentView(R.layout.financed_device_landing_screen);
81 
82         GlifLayout layout = findViewById(R.id.setup_wizard_layout);
83         final String headerString = getString(R.string.financed_device_screen_header,
84                 params.organizationName);
85         layout.setHeaderText(headerString);
86         layout.setIcon(getDrawable(R.drawable.ic_info_outline_24px));
87         setupFooterBar(layout);
88 
89         final ViewGroup item1 = layout.findViewById(R.id.item1);
90         final String makePaymentsSubheaderSummary = getString(
91                 R.string.financed_make_payments_subheader_description, params.organizationName,
92                 params.organizationName);
93         setupItem(item1, R.string.financed_make_payments_subheader_title,
94                 makePaymentsSubheaderSummary, R.drawable.ic_file_download_24px,
95                 params.organizationName);
96 
97         final ViewGroup item2 = layout.findViewById(R.id.item2);
98         final String restrictDeviceSubheaderSummary = getString(
99                 R.string.financed_restrict_device_subheader_description, params.organizationName);
100         setupItem(item2, R.string.financed_restrict_device_subheader_title,
101                 restrictDeviceSubheaderSummary, R.drawable.ic_lock, params.organizationName);
102     }
103 
setupFooterBar(GlifLayout layout)104     private void setupFooterBar(GlifLayout layout) {
105         final FooterBarMixin footerBarMixin = layout.getMixin(FooterBarMixin.class);
106         footerBarMixin.setPrimaryButton(
107                 new FooterButton.Builder(this)
108                         .setText(R.string.next)
109                         .setListener(view -> onNextButtonClicked())
110                         .setButtonType(FooterButton.ButtonType.NEXT)
111                         .setTheme(R.style.SudGlifButton_Primary)
112                         .build());
113     }
114 
setupItem(ViewGroup item, @StringRes int title, String summary, @DrawableRes int icon, String organizationName)115     private void setupItem(ViewGroup item, @StringRes int title, String summary,
116             @DrawableRes int icon, String organizationName) {
117         mStylerHelper.applyListItemStyling(
118                 item, new LinearLayout.LayoutParams(item.getLayoutParams()));
119 
120         final ImageView makePaymentsSubHeaderImage = item.findViewById(R.id.sud_items_icon);
121         makePaymentsSubHeaderImage.setImageDrawable(getDrawable(icon));
122 
123         final TextView makePaymentsSubHeaderTitle = item.findViewById(R.id.sud_items_title);
124         makePaymentsSubHeaderTitle.setText(getString(title, organizationName));
125 
126         final TextView makePaymentsSubHeaderDescription = item.findViewById(R.id.sud_items_summary);
127         makePaymentsSubHeaderDescription.setText(summary);
128     }
129 
onNextButtonClicked()130     private void onNextButtonClicked() {
131         setResult(RESULT_OK);
132         getTransitionHelper().finishActivity(this);
133     }
134 }
135