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