EncryptionInterstitial.java revision d553abcb4cd4ee3682ae4e864c06514d65fcb253
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;
2646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.os.Bundle;
275437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roosimport android.os.UserHandle;
28d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Sainiimport android.support.v7.preference.Preference;
29edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Sainiimport android.util.Log;
3046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.view.LayoutInflater;
3146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.view.View;
3247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Millerimport android.view.accessibility.AccessibilityManager;
3346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerimport android.widget.TextView;
3446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
359d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
3639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport com.android.internal.widget.LockPatternUtils;
3739b467482d1bf256a111c757e9b7621c6f523271Jason Monk
3839b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport java.util.List;
3939b467482d1bf256a111c757e9b7621c6f523271Jason Monk
4046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Millerpublic class EncryptionInterstitial extends SettingsActivity {
41edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini    private final static String TAG = EncryptionInterstitial.class.getSimpleName();
4246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
430973c31db164e09cb5be275cf0f991dd208ee0faMaurice Lam    protected static final String EXTRA_PASSWORD_QUALITY = "extra_password_quality";
44edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini    protected static final String EXTRA_UNLOCK_METHOD_INTENT = "extra_unlock_method_intent";
450698a216311acd9ab52224602d1a75c08bf89f04Jim Miller    public static final String EXTRA_REQUIRE_PASSWORD = "extra_require_password";
46edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini    private static final int CHOOSE_LOCK_REQUEST = 100;
4746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
4846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    @Override
4946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    public Intent getIntent() {
5046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        Intent modIntent = new Intent(super.getIntent());
5146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        modIntent.putExtra(EXTRA_SHOW_FRAGMENT, EncryptionInterstitialFragment.class.getName());
5246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return modIntent;
5346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
5446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
5546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    @Override
5646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    protected boolean isValidFragment(String fragmentName) {
5746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return EncryptionInterstitialFragment.class.getName().equals(fragmentName);
5846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
5946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
600698a216311acd9ab52224602d1a75c08bf89f04Jim Miller    public static Intent createStartIntent(Context ctx, int quality,
61edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            boolean requirePasswordDefault, Intent unlockMethodIntent) {
6246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        return new Intent(ctx, EncryptionInterstitial.class)
6346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                .putExtra(EXTRA_PASSWORD_QUALITY, quality)
640698a216311acd9ab52224602d1a75c08bf89f04Jim Miller                .putExtra(EXTRA_SHOW_FRAGMENT_TITLE_RESID, R.string.encryption_interstitial_header)
65edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                .putExtra(EXTRA_REQUIRE_PASSWORD, requirePasswordDefault)
66edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                .putExtra(EXTRA_UNLOCK_METHOD_INTENT, unlockMethodIntent);
6746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
6846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
6946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment
70d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            implements DialogInterface.OnClickListener {
7146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
7247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        private static final int ACCESSIBILITY_WARNING_DIALOG = 1;
73d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private static final String KEY_ENCRYPT_REQUIRE_PASSWORD = "encrypt_require_password";
74d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private static final String KEY_ENCRYPT_DONT_REQUIRE_PASSWORD =
75d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                "encrypt_dont_require_password";
76d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini
77d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private Preference mRequirePasswordToDecrypt;
78d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        private Preference mDontRequirePasswordToDecrypt;
790698a216311acd9ab52224602d1a75c08bf89f04Jim Miller        private boolean mPasswordRequired;
80edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        private Intent mUnlockMethodIntent;
8146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
8246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        @Override
838a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        protected int getMetricsCategory() {
849d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren            return MetricsEvent.ENCRYPTION;
858a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        }
868a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
878a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren        @Override
88d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        public void onCreate(Bundle savedInstanceState) {
89d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            super.onCreate(savedInstanceState);
907e831030201fcac9ca0acc9684497dc44cea7023Maurice Lam
91d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            addPreferencesFromResource(R.xml.security_settings_encryption_interstitial);
92d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini
93d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mRequirePasswordToDecrypt = findPreference(KEY_ENCRYPT_REQUIRE_PASSWORD);
94d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mDontRequirePasswordToDecrypt = findPreference(KEY_ENCRYPT_DONT_REQUIRE_PASSWORD);
95c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam            boolean forFingerprint = getActivity().getIntent().getBooleanExtra(
96c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, false);
97edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            Intent intent = getActivity().getIntent();
98edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            final int quality = intent.getIntExtra(EXTRA_PASSWORD_QUALITY, 0);
99edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            mUnlockMethodIntent = (Intent) intent.getParcelableExtra(EXTRA_UNLOCK_METHOD_INTENT);
10046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int msgId;
10146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int enableId;
10246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            final int disableId;
10346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            switch (quality) {
10446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
105c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
106c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pattern_for_fingerprint :
107c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pattern;
10846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_pattern;
10946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_pattern;
11046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
11146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
11246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
113c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
114c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pin_for_fingerprint :
115c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_pin;
11646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_pin;
11746c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_pin;
11846c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
11946c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                default:
120c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                    msgId = forFingerprint ?
121c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_password_for_fingerprint :
122c0e7879684d7d9c5cd102b124ee8cf1a2637d49dMaurice Lam                            R.string.encryption_interstitial_message_password;
12346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    enableId = R.string.encrypt_require_password;
12446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    disableId = R.string.encrypt_dont_require_password;
12546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller                    break;
12646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller            }
127d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            TextView message = createHeaderView();
128d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            message.setText(msgId);
129d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            setHeaderView(message);
1300698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
131d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mRequirePasswordToDecrypt.setTitle(enableId);
1320698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
133d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            mDontRequirePasswordToDecrypt.setTitle(disableId);
1340698a216311acd9ab52224602d1a75c08bf89f04Jim Miller
13547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            setRequirePasswordState(getActivity().getIntent().getBooleanExtra(
13647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    EXTRA_REQUIRE_PASSWORD, true));
137d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        }
138edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
139d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        protected TextView createHeaderView() {
140d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            TextView message = (TextView) LayoutInflater.from(getActivity()).inflate(
141d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                    R.layout.encryption_interstitial_header, null, false);
142d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            return message;
143edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        }
144edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
145edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        protected void startLockIntent() {
146edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            if (mUnlockMethodIntent != null) {
147edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                mUnlockMethodIntent.putExtra(EXTRA_REQUIRE_PASSWORD, mPasswordRequired);
148edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                startActivityForResult(mUnlockMethodIntent, CHOOSE_LOCK_REQUEST);
149edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            } else {
150edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                Log.wtf(TAG, "no unlock intent to start");
151edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                finish();
152edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            }
153edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        }
154edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini
155edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        @Override
156edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini        public void onActivityResult(int requestCode, int resultCode, Intent data) {
157edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            super.onActivityResult(requestCode, resultCode, data);
158e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam            if (requestCode == CHOOSE_LOCK_REQUEST && resultCode != RESULT_CANCELED) {
159e9d2abca86ef3a83fb25b9562e206e459a5b4e2bMaurice Lam                getActivity().setResult(resultCode, data);
160edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini                finish();
161edac136e162d3935ea1ccedf6c630eff4c591d7eUdam Saini            }
16246c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
16346c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
16446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        @Override
165d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini        public boolean onPreferenceTreeClick(Preference preference) {
166d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            final String key = preference.getKey();
167d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            if (key.equals(KEY_ENCRYPT_REQUIRE_PASSWORD)) {
16847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
16947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                if (accEn && !mPasswordRequired) {
17047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    setRequirePasswordState(false); // clear the UI state
17147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    showDialog(ACCESSIBILITY_WARNING_DIALOG);
17247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                } else {
17347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    setRequirePasswordState(true);
174d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                    startLockIntent();
17547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                }
17647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            } else {
17747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(false);
178d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                startLockIntent();
17947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
180d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini            return true;
18147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        }
18247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller
18347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        @Override
18447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        public Dialog onCreateDialog(int dialogId) {
18547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            switch(dialogId) {
18647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                case ACCESSIBILITY_WARNING_DIALOG: {
18747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    final int quality = new LockPatternUtils(getActivity())
1885437588abd69bf3eff59684528aaf50e09b6cffcAdrian Roos                            .getKeyguardStoredPasswordQuality(UserHandle.myUserId());
18947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    final int titleId;
19047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    final int messageId;
19147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    switch (quality) {
19247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING:
19347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_pattern;
19447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_pattern;
19547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
19647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC:
19747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX:
19847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_pin;
19947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_pin;
20047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
20147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        default:
20247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            titleId = R.string.encrypt_talkback_dialog_require_password;
20347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            messageId = R.string.encrypt_talkback_dialog_message_password;
20447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                            break;
20547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    }
206aa0376759873893197a0109025fd4ec8beca5929Jim Miller
207aa0376759873893197a0109025fd4ec8beca5929Jim Miller
208aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    List<AccessibilityServiceInfo> list =
209aa0376759873893197a0109025fd4ec8beca5929Jim Miller                            AccessibilityManager.getInstance(getActivity())
210aa0376759873893197a0109025fd4ec8beca5929Jim Miller                            .getEnabledAccessibilityServiceList(
211aa0376759873893197a0109025fd4ec8beca5929Jim Miller                                    AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
212aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    final CharSequence exampleAccessibility;
213aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    if (list.isEmpty()) {
214aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        // This should never happen.  But we shouldn't crash
215aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        exampleAccessibility = "";
216aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    } else {
217aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        exampleAccessibility = list.get(0).getResolveInfo()
218aa0376759873893197a0109025fd4ec8beca5929Jim Miller                                .loadLabel(getPackageManager());
219aa0376759873893197a0109025fd4ec8beca5929Jim Miller                    }
22047adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                    return new AlertDialog.Builder(getActivity())
22147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setTitle(titleId)
222aa0376759873893197a0109025fd4ec8beca5929Jim Miller                        .setMessage(getString(messageId, exampleAccessibility))
22347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setCancelable(true)
22447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setPositiveButton(android.R.string.ok, this)
22547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .setNegativeButton(android.R.string.cancel, this)
22647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                        .create();
22747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                }
22847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                default: throw new IllegalArgumentException();
22947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
23046c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
23146c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller
23247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        private void setRequirePasswordState(boolean required) {
23347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            mPasswordRequired = required;
23446c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller        }
23547adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller
23647adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        @Override
23747adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        public void onClick(DialogInterface dialog, int which) {
23847adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            if (which == DialogInterface.BUTTON_POSITIVE) {
23947adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(true);
240d553abcb4cd4ee3682ae4e864c06514d65fcb253Udam Saini                startLockIntent();
24147adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            } else if (which == DialogInterface.BUTTON_NEGATIVE) {
24247adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller                setRequirePasswordState(false);
24347adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller            }
24447adff0a8bb4aeeefe6e3d3efc0b2579f6754af0Jim Miller        }
24546c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller    }
24646c7f6d6f32efec26bc9343f591ad1ddbe8f3b4aJim Miller}
247