146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller/*
246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * Copyright (C) 2014 The Android Open Source Project
346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller *
446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * Licensed under the Apache License, Version 2.0 (the "License");
546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * you may not use this file except in compliance with the License.
646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * You may obtain a copy of the License at
746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller *
846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller *      http://www.apache.org/licenses/LICENSE-2.0
946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller *
1046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * Unless required by applicable law or agreed to in writing, software
1146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * distributed under the License is distributed on an "AS IS" BASIS,
1246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * See the License for the specific language governing permissions and
1446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller * limitations under the License
1546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller */
1646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
1746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerpackage com.android.settings;
1846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
19aa0376759873893197a0109025fd4ec8beca5929Jim Millerimport android.accessibilityservice.AccessibilityServiceInfo;
2047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Millerimport android.app.AlertDialog;
2147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Millerimport android.app.Dialog;
2246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.app.admin.DevicePolicyManager;
2346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.content.Context;
2447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Millerimport android.content.DialogInterface;
2546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.content.Intent;
26d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport android.content.res.Resources;
2746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.Bundle;
28d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Sainiimport android.support.v7.preference.Preference;
29d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport android.support.v7.widget.RecyclerView;
30edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Sainiimport android.util.Log;
3146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.view.LayoutInflater;
32d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport android.view.View;
33d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport android.view.ViewGroup;
3447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Millerimport android.view.accessibility.AccessibilityManager;
35d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport android.widget.LinearLayout;
3646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.widget.TextView;
3746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
389d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
39d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport com.android.settings.utils.SettingsDividerItemDecoration;
40d189ac52a4e49291b729d817fc903116abc086d0Maurice Lamimport com.android.setupwizardlib.GlifPreferenceLayout;
4139b467482d1bf256a111c757e9b7621c6f523271Jason Monk
4239b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport java.util.List;
4339b467482d1bf256a111c757e9b7621c6f523271Jason Monk
4446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerpublic class EncryptionInterstitial extends SettingsActivity {
45d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam    private static final String TAG = EncryptionInterstitial.class.getSimpleName();
4646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
470973c31db164e09cb5be275cf0f991dd208ee0faMaurice Lam    protected static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality";
48edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini    protected static final String EXTRA_UNLOCK_METHOD_INTENT = "extra_unlock_method_intent";
490698a216311acd9ab52224602d1a75c08bf89f04Jim Miller    public static final String EXTRA_REQUIRE_PASSWORD = "extra_require_password";
50edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini    private static final int CHOOSE_LOCK_REQUEST = 100;
5146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
5246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    @Override
5346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    public Intent getIntent() {
5446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        Intent modIntent = new Intent(super.getIntent());
5546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        modIntent.putExtra(EXTRA_SHOW_FRAGMENT, EncryptionInterstitialFragment.class.getName());
5646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return modIntent;
5746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
5846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
5946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    @Override
6046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    protected boolean isValidFragment(String fragmentName) {
6146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return EncryptionInterstitialFragment.class.getName().equals(fragmentName);
6246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
6346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
640698a216311acd9ab52224602d1a75c08bf89f04Jim Miller    public static Intent createStartIntent(Context ctx, int quality,
65edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            boolean requirePasswordDefault, Intent unlockMethodIntent) {
6646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return new Intent(ctx, EncryptionInterstitial.class)
6746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                .putExtra(EXTRA_PASSWORD_QUALITY, quality)
680698a216311acd9ab52224602d1a75c08bf89f04Jim Miller                .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.encryption_interstitial_header)
69edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                .putExtra(EXTRA_REQUIRE_PASSWORD, requirePasswordDefault)
70edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                .putExtra(EXTRA_UNLOCK_METHOD_INTENT, unlockMethodIntent);
7146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
7246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
73d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam    @Override
74d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam    protected void onCreate(Bundle savedInstance) {
75d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        super.onCreate(savedInstance);
76d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        LinearLayout layout = (LinearLayout) findViewById(R.id.content_parent);
77d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        layout.setFitsSystemWindows(false);
78d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam    }
79d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam
8046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment
81d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            implements DialogInterface.OnClickListener {
8246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
8347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        private static final int ACCESSIBILITY_WARNING_DIALOG = 1;
84d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private static final String KEY_ENCRYPT_REQUIRE_PASSWORD = "encrypt_require_password";
85d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private static final String KEY_ENCRYPT_DONT_REQUIRE_PASSWORD =
86d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                "encrypt_dont_require_password";
87d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini
88d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private Preference mRequirePasswordToDecrypt;
89d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private Preference mDontRequirePasswordToDecrypt;
900698a216311acd9ab52224602d1a75c08bf89f04Jim Miller        private boolean mPasswordRequired;
91edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        private Intent mUnlockMethodIntent;
928890f7acbd6a7607f490a03cbed17119437a9bf0Maurice Lam        private int mRequestedPasswordQuality;
9346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
9446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        @Override
958a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        protected int getMetricsCategory() {
969d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren            return MetricsEvent.ENCRYPTION;
978a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        }
988a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
998a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        @Override
100d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        public void onCreate(Bundle savedInstanceState) {
101d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            super.onCreate(savedInstanceState);
1027e831030201fcac9ca0acc9684497dc44cea7023Maurice Lam
103d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            addPreferencesFromResource(R.xml.security_settings_encryption_interstitial);
104d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini
105a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey            // Used for testing purposes
106a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey            findPreference(KEY_ENCRYPT_DONT_REQUIRE_PASSWORD)
107a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey                    .setViewId(R.id.encrypt_dont_require_password);
108a77652fea94fca598d530e40a815ca0c8e8c0d15Jeff Sharkey
109d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mRequirePasswordToDecrypt = findPreference(KEY_ENCRYPT_REQUIRE_PASSWORD);
110d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mDontRequirePasswordToDecrypt = findPreference(KEY_ENCRYPT_DONT_REQUIRE_PASSWORD);
111c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam            boolean forFingerprint = getActivity().getIntent().getBooleanExtra(
112c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false);
113edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            Intent intent = getActivity().getIntent();
1148890f7acbd6a7607f490a03cbed17119437a9bf0Maurice Lam            mRequestedPasswordQuality = intent.getIntExtra(EXTRA_PASSWORD_QUALITY, 0);
1158890f7acbd6a7607f490a03cbed17119437a9bf0Maurice Lam            mUnlockMethodIntent = intent.getParcelableExtra(EXTRA_UNLOCK_METHOD_INTENT);
11646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int msgId;
11746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int enableId;
11846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int disableId;
1198890f7acbd6a7607f490a03cbed17119437a9bf0Maurice Lam            switch (mRequestedPasswordQuality) {
12046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
121c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
122c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pattern_for_fingerprint :
123c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pattern;
12446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_pattern;
12546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_pattern;
12646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
12746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
12846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
129c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
130c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pin_for_fingerprint :
131c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pin;
13246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_pin;
13346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_pin;
13446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
13546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                default:
136c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
137c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_password_for_fingerprint :
138c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_password;
13946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_password;
14046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_password;
14146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
14246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            }
143d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            TextView message = (TextView) LayoutInflater.from(getActivity()).inflate(
144d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam                    R.layout.encryption_interstitial_header, null, false);
145d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            message.setText(msgId);
146d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            setHeaderView(message);
1470698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
148d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mRequirePasswordToDecrypt.setTitle(enableId);
1490698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
150d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mDontRequirePasswordToDecrypt.setTitle(disableId);
1510698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
15247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            setRequirePasswordState(getActivity().getIntent().getBooleanExtra(
15347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    EXTRA_REQUIRE_PASSWORD, true));
154d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        }
155edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
156d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        @Override
157d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        public void onViewCreated(View view, Bundle savedInstanceState) {
158d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            super.onViewCreated(view, savedInstanceState);
159d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            GlifPreferenceLayout layout = (GlifPreferenceLayout) view;
160d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            layout.setDividerItemDecoration(new SettingsDividerItemDecoration(getContext()));
161d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam
162d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            layout.setIcon(getContext().getDrawable(R.drawable.ic_lock));
163d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            layout.setHeaderText(getActivity().getTitle());
164d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam
165d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            // Use the dividers in SetupWizardRecyclerLayout. Suppress the dividers in
166d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            // PreferenceFragment.
167d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            setDivider(null);
168d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        }
169d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam
170d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        @Override
171d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam        public RecyclerView onCreateRecyclerView(LayoutInflater inflater, ViewGroup parent,
172d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam                Bundle savedInstanceState) {
173d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            GlifPreferenceLayout layout = (GlifPreferenceLayout) parent;
174d189ac52a4e49291b729d817fc903116abc086d0Maurice Lam            return layout.onCreateRecyclerView(inflater, parent, savedInstanceState);
175edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        }
176edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
177edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        protected void startLockIntent() {
178edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            if (mUnlockMethodIntent != null) {
179edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                mUnlockMethodIntent.putExtra(EXTRA_REQUIRE_PASSWORD, mPasswordRequired);
180edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                startActivityForResult(mUnlockMethodIntent, CHOOSE_LOCK_REQUEST);
181edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            } else {
182edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                Log.wtf(TAG, "no unlock intent to start");
183edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                finish();
184edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            }
185edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        }
186edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
187edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        @Override
188edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        public void onActivityResult(int requestCode, int resultCode, Intent data) {
189edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            super.onActivityResult(requestCode, resultCode, data);
190e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam            if (requestCode == CHOOSE_LOCK_REQUEST && resultCode != RESULT_CANCELED) {
191e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam                getActivity().setResult(resultCode, data);
192edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                finish();
193edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            }
19446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
19546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
19646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        @Override
197d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        public boolean onPreferenceTreeClick(Preference preference) {
198d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            final String key = preference.getKey();
199d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            if (key.equals(KEY_ENCRYPT_REQUIRE_PASSWORD)) {
20047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
20147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                if (accEn && !mPasswordRequired) {
20247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    setRequirePasswordState(false); // clear the UI state
20347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    showDialog(ACCESSIBILITY_WARNING_DIALOG);
20447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                } else {
20547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    setRequirePasswordState(true);
206d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                    startLockIntent();
20747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                }
20847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            } else {
20947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(false);
210d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                startLockIntent();
21147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
212d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            return true;
21347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        }
21447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller
21547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        @Override
21647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        public Dialog onCreateDialog(int dialogId) {
21747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            switch(dialogId) {
21847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                case ACCESSIBILITY_WARNING_DIALOG: {
21947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    final int titleId;
22047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    final int messageId;
2218890f7acbd6a7607f490a03cbed17119437a9bf0Maurice Lam                    switch (mRequestedPasswordQuality) {
22247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
22347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_pattern;
22447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_pattern;
22547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
22647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
22747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
22847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_pin;
22947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_pin;
23047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
23147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        default:
23247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_password;
23347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_password;
23447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
23547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    }
236aa0376759873893197a0109025fd4ec8beca5929Jim Miller
237aa0376759873893197a0109025fd4ec8beca5929Jim Miller
238aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    List<AccessibilityServiceInfo> list =
239aa0376759873893197a0109025fd4ec8beca5929Jim Miller                            AccessibilityManager.getInstance(getActivity())
240aa0376759873893197a0109025fd4ec8beca5929Jim Miller                            .getEnabledAccessibilityServiceList(
241aa0376759873893197a0109025fd4ec8beca5929Jim Miller                                    AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
242aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    final CharSequence exampleAccessibility;
243aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    if (list.isEmpty()) {
244aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        // This should never happen.  But we shouldn't crash
245aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        exampleAccessibility = "";
246aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    } else {
247aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        exampleAccessibility = list.get(0).getResolveInfo()
248aa0376759873893197a0109025fd4ec8beca5929Jim Miller                                .loadLabel(getPackageManager());
249aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    }
25047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    return new AlertDialog.Builder(getActivity())
25147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setTitle(titleId)
252aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        .setMessage(getString(messageId, exampleAccessibility))
25347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setCancelable(true)
25447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setPositiveButton(android.R.string.ok, this)
25547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setNegativeButton(android.R.string.cancel, this)
25647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .create();
25747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                }
25847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                default: throw new IllegalArgumentException();
25947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
26046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
26146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
26247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        private void setRequirePasswordState(boolean required) {
26347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            mPasswordRequired = required;
26446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
26547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller
26647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        @Override
26747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        public void onClick(DialogInterface dialog, int which) {
26847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            if (which == DialogInterface.BUTTON_POSITIVE) {
26947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(true);
270d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                startLockIntent();
27147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            } else if (which == DialogInterface.BUTTON_NEGATIVE) {
27247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(false);
27347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
27447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        }
27546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
27646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller}
277