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