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