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