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 172eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lampackage com.android.settings.password; 186b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 196b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.app.Fragment; 206b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.content.Context; 216b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lamimport android.content.Intent; 22a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathurimport android.os.Bundle; 234723abfe2606672260a0d8f70c653de470d23eefMaurice Lamimport android.support.annotation.Nullable; 244723abfe2606672260a0d8f70c653de470d23eefMaurice Lamimport android.view.LayoutInflater; 25a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathurimport android.view.View; 264723abfe2606672260a0d8f70c653de470d23eefMaurice Lamimport android.view.ViewGroup; 27a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathurimport android.widget.Button; 282eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam 29a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathurimport com.android.settings.R; 302eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lamimport com.android.settings.SetupRedactionInterstitial; 3139b467482d1bf256a111c757e9b7621c6f523271Jason Monk 32ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam/** 33ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * Setup Wizard's version of ChooseLockPattern screen. It inherits the logic and basic structure 34ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * from ChooseLockPattern class, and should remain similar to that behaviorally. This class should 35ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * only overload base methods for minor theme and behavior differences specific to Setup Wizard. 36ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * Other changes should be done to ChooseLockPattern class instead and let this class inherit 37ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam * those changes. 38ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam */ 3983301b5256e3fd930d620e8e9ad5f43cd388ba09Maurice Lampublic class SetupChooseLockPattern extends ChooseLockPattern { 406b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 412eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam public static Intent modifyIntentForSetup(Context context, Intent chooseLockPatternIntent) { 422eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam chooseLockPatternIntent.setClass(context, SetupChooseLockPattern.class); 432eb170cd6ff43db01dc0ff3c1fcac5ebba4489deMaurice Lam return chooseLockPatternIntent; 443859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam } 453859643c5b65bd54dcacce029a3a97a0386ede25Maurice Lam 466b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 476b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam protected boolean isValidFragment(String fragmentName) { 486b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return SetupChooseLockPatternFragment.class.getName().equals(fragmentName); 496b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 506b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 516b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 526b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam /* package */ Class<? extends Fragment> getFragmentClass() { 536b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam return SetupChooseLockPatternFragment.class; 546b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 556b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam 56a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur public static class SetupChooseLockPatternFragment extends ChooseLockPatternFragment 57a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur implements ChooseLockTypeDialogFragment.OnLockTypeSelectedListener { 58a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur 594723abfe2606672260a0d8f70c653de470d23eefMaurice Lam @Nullable 604723abfe2606672260a0d8f70c653de470d23eefMaurice Lam private Button mOptionsButton; 614723abfe2606672260a0d8f70c653de470d23eefMaurice Lam 62a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur @Override 634723abfe2606672260a0d8f70c653de470d23eefMaurice Lam public View onCreateView( 644723abfe2606672260a0d8f70c653de470d23eefMaurice Lam LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 654723abfe2606672260a0d8f70c653de470d23eefMaurice Lam View view = super.onCreateView(inflater, container, savedInstanceState); 66212dd952a125fa777f3ec02edef537f155ae195dMaurice Lam if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui)) { 674723abfe2606672260a0d8f70c653de470d23eefMaurice Lam mOptionsButton = view.findViewById(R.id.screen_lock_options); 684723abfe2606672260a0d8f70c653de470d23eefMaurice Lam mOptionsButton.setOnClickListener((btn) -> 69212dd952a125fa777f3ec02edef537f155ae195dMaurice Lam ChooseLockTypeDialogFragment.newInstance(mUserId) 70212dd952a125fa777f3ec02edef537f155ae195dMaurice Lam .show(getChildFragmentManager(), null)); 71212dd952a125fa777f3ec02edef537f155ae195dMaurice Lam } 72e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam // enable skip button only during setup wizard and not with fingerprint flow. 73e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam if (!mForFingerprint) { 74e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam Button skipButton = view.findViewById(R.id.skip_button); 75e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam skipButton.setVisibility(View.VISIBLE); 76e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam skipButton.setOnClickListener(v -> { 77e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam SetupSkipDialog dialog = SetupSkipDialog.newInstance( 78e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam getActivity().getIntent() 79e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam .getBooleanExtra(SetupSkipDialog.EXTRA_FRP_SUPPORTED, false)); 80e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam dialog.show(getFragmentManager()); 81e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam }); 82e13e319e0c9af2eebb33404cec6f2f1f282c62c5Maurice Lam } 834723abfe2606672260a0d8f70c653de470d23eefMaurice Lam return view; 84a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur } 85a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur 86a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur @Override 87a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur public void onLockTypeSelected(ScreenLockType lock) { 88a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur if (ScreenLockType.PATTERN == lock) { 89a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur return; 90a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur } 91a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur startChooseLockActivity(lock, getActivity()); 92a1314df69c193063cd2dfc0b84f0936855ac85abAjay Nadathur } 93af103b4eb476881fb27cfb9b6dc94b3fa5e74f28Maurice Lam 946b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam @Override 954723abfe2606672260a0d8f70c653de470d23eefMaurice Lam protected void updateStage(Stage stage) { 964723abfe2606672260a0d8f70c653de470d23eefMaurice Lam super.updateStage(stage); 974723abfe2606672260a0d8f70c653de470d23eefMaurice Lam if (!getResources().getBoolean(R.bool.config_lock_pattern_minimal_ui) 984723abfe2606672260a0d8f70c653de470d23eefMaurice Lam && mOptionsButton != null) { 994723abfe2606672260a0d8f70c653de470d23eefMaurice Lam mOptionsButton.setVisibility( 1004723abfe2606672260a0d8f70c653de470d23eefMaurice Lam stage == Stage.Introduction ? View.VISIBLE : View.INVISIBLE); 1014723abfe2606672260a0d8f70c653de470d23eefMaurice Lam } 1024723abfe2606672260a0d8f70c653de470d23eefMaurice Lam } 1034723abfe2606672260a0d8f70c653de470d23eefMaurice Lam 1044723abfe2606672260a0d8f70c653de470d23eefMaurice Lam @Override 105ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam protected Intent getRedactionInterstitialIntent(Context context) { 106957fc67af21b87c01e2c5939f0611021d8fe6c31Maurice Lam // Setup wizard's redaction interstitial is deferred to optional step. Enable that 107957fc67af21b87c01e2c5939f0611021d8fe6c31Maurice Lam // optional step if the lock screen was set up. 108c7e0fd90fb1a708d671ab161358c9d0f8994a560Maurice Lam SetupRedactionInterstitial.setEnabled(context, true); 109dd05ab7600f79a6e77b6b5ed3916823d5985df72Udam Saini return null; 110ecd2b7b81fd2faa2f2f3dbe5a169c749321f3d89Maurice Lam } 1116b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam } 1126b19fa9017800b94c75238339a337fd8f6c3e808Maurice Lam} 113