16b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam/* 26b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * Copyright (C) 2014 The Android Open Source Project 36b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * 46b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * Licensed under the Apache License, Version 2.0 (the "License"); 56b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * you may not use this file except in compliance with the License. 66b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * You may obtain a copy of the License at 76b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * 86b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * http://www.apache.org/licenses/LICENSE-2.0 96b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * 106b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * Unless required by applicable law or agreed to in writing, software 116b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * distributed under the License is distributed on an "AS IS" BASIS, 126b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * See the License for the specific language governing permissions and 146b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam * limitations under the License. 156b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam */ 166b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 176b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lampackage com.android.settings; 186b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 196b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport com.android.setupwizard.navigationbar.SetupWizardNavBar; 206b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 216b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.app.Fragment; 226b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.content.Context; 236b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.content.Intent; 246b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.content.res.Resources; 256b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.os.Bundle; 266b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.view.LayoutInflater; 276b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.view.View; 286b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.view.ViewGroup; 29a49c7c572f79096610853f57825d603e95ccef5fMaurice Lamimport android.view.WindowInsets; 306b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 31ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam/** 32ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * Setup Wizard's version of ChooseLockPassword screen. It inherits the logic and basic structure 33ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * from ChooseLockPassword class, and should remain similar to that behaviorally. This class should 34ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * only overload base methods for minor theme and behavior differences specific to Setup Wizard. 35ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * Other changes should be done to ChooseLockPassword class instead and let this class inherit 36ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * those changes. 37ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam */ 386b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lampublic class SetupChooseLockPassword extends ChooseLockPassword 396b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam implements SetupWizardNavBar.NavigationBarListener { 406b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 416b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public static Intent createIntent(Context context, int quality, final boolean isFallback, 426b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam int minLength, final int maxLength, boolean requirePasswordToDecrypt, 436b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam boolean confirmCredentials) { 446b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam Intent intent = ChooseLockPassword.createIntent(context, quality, isFallback, minLength, 456b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam maxLength, requirePasswordToDecrypt, confirmCredentials); 466b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam intent.setClass(context, SetupChooseLockPassword.class); 476b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam intent.putExtra(EXTRA_PREFS_SHOW_BUTTON_BAR, false); 486b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return intent; 496b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 506b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 51af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam private SetupWizardNavBar mNavigationBar; 52af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam private SetupChooseLockPasswordFragment mFragment; 53af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam 546b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 556b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected boolean isValidFragment(String fragmentName) { 566b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return SetupChooseLockPasswordFragment.class.getName().equals(fragmentName); 576b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 586b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 596b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 606b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 616b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return SetupChooseLockPasswordFragment.class; 626b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 636b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 646b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 656b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { 666b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam resid = SetupWizardUtils.getTheme(getIntent(), resid); 676b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam super.onApplyThemeResource(theme, resid, first); 686b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 696b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 706b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 716b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public void onNavigationBarCreated(SetupWizardNavBar bar) { 72af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam mNavigationBar = bar; 736b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam SetupWizardUtils.setImmersiveMode(this, bar); 746b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 756b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 766b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 776b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public void onNavigateBack() { 786b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam onBackPressed(); 796b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 806b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 816b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 826b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public void onNavigateNext() { 83af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam if (mFragment != null) { 84af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam mFragment.handleNext(); 85af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam } 86af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam } 87af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam 88af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam @Override 89af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam public void onAttachFragment(Fragment fragment) { 90af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam super.onAttachFragment(fragment); 91af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam if (fragment instanceof SetupChooseLockPasswordFragment) { 92af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam mFragment = (SetupChooseLockPasswordFragment) fragment; 93af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam } 946b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 956b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 96a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam public static class SetupChooseLockPasswordFragment extends ChooseLockPasswordFragment 97a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam implements View.OnApplyWindowInsetsListener { 986b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 996b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 1006b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public View onCreateView(LayoutInflater inflater, ViewGroup container, 1016b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam Bundle savedInstanceState) { 1026b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam final View view = inflater.inflate(R.layout.setup_template, container, false); 103a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam View scrollView = view.findViewById(R.id.bottom_scroll_view); 104a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam scrollView.setOnApplyWindowInsetsListener(this); 1056b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam ViewGroup setupContent = (ViewGroup) view.findViewById(R.id.setup_content); 1066b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam inflater.inflate(R.layout.setup_choose_lock_password, setupContent, true); 1076b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return view; 1086b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 1096b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 1106b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 1116b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam public void onViewCreated(View view, Bundle savedInstanceState) { 1126b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam super.onViewCreated(view, savedInstanceState); 1131227a19ecc0e5a42156027ae58bea7f77bf41a27Maurice Lam SetupWizardUtils.setIllustration(getActivity(), 1141227a19ecc0e5a42156027ae58bea7f77bf41a27Maurice Lam R.drawable.setup_illustration_lock_screen); 1156b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam SetupWizardUtils.setHeaderText(getActivity(), getActivity().getTitle()); 1166b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 117ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam 118ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam @Override 119ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getRedactionInterstitialIntent(Context context) { 120ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam Intent intent = SetupRedactionInterstitial.createStartIntent(context); 121ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam SetupWizardUtils.copySetupExtras(getActivity().getIntent(), intent); 122ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam return intent; 123ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 124af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam 125af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam @Override 126af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam protected void setNextEnabled(boolean enabled) { 127af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam SetupChooseLockPassword activity = (SetupChooseLockPassword) getActivity(); 128af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam activity.mNavigationBar.getNextButton().setEnabled(enabled); 129af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam } 130af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam 131af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam @Override 132af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam protected void setNextText(int text) { 133af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam SetupChooseLockPassword activity = (SetupChooseLockPassword) getActivity(); 134af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam activity.mNavigationBar.getNextButton().setText(text); 135af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam } 136a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam 137a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam @Override 138a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam public WindowInsets onApplyWindowInsets(View view, WindowInsets insets) { 139a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam SetupChooseLockPassword activity = (SetupChooseLockPassword) getActivity(); 140a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam final int bottomMargin = Math.max(insets.getSystemWindowInsetBottom() 141a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam - activity.mNavigationBar.getView().getHeight(), 0); 142a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); 143a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam lp.setMargins(lp.leftMargin, lp.topMargin, lp.rightMargin, bottomMargin); 144a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam view.setLayoutParams(lp); 145a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam return insets.replaceSystemWindowInsets( 146a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam insets.getSystemWindowInsetLeft(), 147a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam insets.getSystemWindowInsetTop(), 148a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam insets.getSystemWindowInsetRight(), 149a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam 0 /* bottom */); 150a49c7c572f79096610853f57825d603e95ccef5fMaurice Lam } 1516b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 1526b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam} 153