diff options
author | Maurice Lam <yukl@google.com> | 2017-03-21 17:57:55 -0700 |
---|---|---|
committer | Maurice Lam <yukl@google.com> | 2017-03-22 18:41:46 -0700 |
commit | 18d7965a1169f14d40e63a3b1761ba1a259bb66c (patch) | |
tree | 9946dfc1d002df09135773d48855f78a14b70b2f /src/com/android/settings/EncryptionInterstitial.java | |
parent | 9be96e06bb1e12e5068f2672dfbb9baa0051d604 (diff) | |
download | packages_apps_Settings-18d7965a1169f14d40e63a3b1761ba1a259bb66c.tar.gz packages_apps_Settings-18d7965a1169f14d40e63a3b1761ba1a259bb66c.tar.bz2 packages_apps_Settings-18d7965a1169f14d40e63a3b1761ba1a259bb66c.zip |
Use InstrumentedFragment for EncryptionInterstitial
Since EncryptionInterstitial now uses buttons and not preference list
items, extend InstrumentedFragment rather than
SettingsPreferenceFragment for less overhead.
Test: Run EncryptionInterstitialTest via `am instrument`
Change-Id: Idb56b467ae03a1aff680dbc25d2889dad77f391d
Diffstat (limited to 'src/com/android/settings/EncryptionInterstitial.java')
-rw-r--r-- | src/com/android/settings/EncryptionInterstitial.java | 146 |
1 files changed, 85 insertions, 61 deletions
diff --git a/src/com/android/settings/EncryptionInterstitial.java b/src/com/android/settings/EncryptionInterstitial.java index 42ca516b50..ed9596d9c2 100644 --- a/src/com/android/settings/EncryptionInterstitial.java +++ b/src/com/android/settings/EncryptionInterstitial.java @@ -17,6 +17,7 @@ package com.android.settings; import android.accessibilityservice.AccessibilityServiceInfo; +import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.admin.DevicePolicyManager; @@ -29,11 +30,12 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.accessibility.AccessibilityManager; -import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.settings.core.InstrumentedFragment; +import com.android.settings.core.instrumentation.InstrumentedDialogFragment; import com.android.setupwizardlib.GlifLayout; import java.util.List; @@ -74,10 +76,8 @@ public class EncryptionInterstitial extends SettingsActivity { layout.setFitsSystemWindows(false); } - public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment - implements View.OnClickListener, DialogInterface.OnClickListener { - - private static final int ACCESSIBILITY_WARNING_DIALOG = 1; + public static class EncryptionInterstitialFragment extends InstrumentedFragment + implements View.OnClickListener { private View mRequirePasswordToDecrypt; private View mDontRequirePasswordToDecrypt; @@ -164,7 +164,10 @@ public class EncryptionInterstitial extends SettingsActivity { final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled(); if (accEn && !mPasswordRequired) { setRequirePasswordState(false); // clear the UI state - showDialog(ACCESSIBILITY_WARNING_DIALOG); + AccessibilityWarningDialogFragment.newInstance(mRequestedPasswordQuality) + .show( + getChildFragmentManager(), + AccessibilityWarningDialogFragment.TAG); } else { setRequirePasswordState(true); startLockIntent(); @@ -175,72 +178,93 @@ public class EncryptionInterstitial extends SettingsActivity { } } - @Override - public Dialog onCreateDialog(int dialogId) { - switch(dialogId) { - case ACCESSIBILITY_WARNING_DIALOG: { - final int titleId; - final int messageId; - switch (mRequestedPasswordQuality) { - case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: - titleId = R.string.encrypt_talkback_dialog_require_pattern; - messageId = R.string.encrypt_talkback_dialog_message_pattern; - break; - case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: - case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: - titleId = R.string.encrypt_talkback_dialog_require_pin; - messageId = R.string.encrypt_talkback_dialog_message_pin; - break; - default: - titleId = R.string.encrypt_talkback_dialog_require_password; - messageId = R.string.encrypt_talkback_dialog_message_password; - break; - } - - - List<AccessibilityServiceInfo> list = - AccessibilityManager.getInstance(getActivity()) - .getEnabledAccessibilityServiceList( - AccessibilityServiceInfo.FEEDBACK_ALL_MASK); - final CharSequence exampleAccessibility; - if (list.isEmpty()) { - // This should never happen. But we shouldn't crash - exampleAccessibility = ""; - } else { - exampleAccessibility = list.get(0).getResolveInfo() - .loadLabel(getPackageManager()); - } - return new AlertDialog.Builder(getActivity()) - .setTitle(titleId) - .setMessage(getString(messageId, exampleAccessibility)) - .setCancelable(true) - .setPositiveButton(android.R.string.ok, this) - .setNegativeButton(android.R.string.cancel, this) - .create(); - } - default: throw new IllegalArgumentException(); + private void setRequirePasswordState(boolean required) { + mPasswordRequired = required; + } + + public void finish() { + Activity activity = getActivity(); + if (activity == null) return; + if (getFragmentManager().getBackStackEntryCount() > 0) { + getFragmentManager().popBackStack(); + } else { + activity.finish(); } } + } + + public static class AccessibilityWarningDialogFragment extends InstrumentedDialogFragment + implements DialogInterface.OnClickListener { + + public static final String TAG = "AccessibilityWarningDialog"; + + public static AccessibilityWarningDialogFragment newInstance(int passwordQuality) { + AccessibilityWarningDialogFragment fragment = new AccessibilityWarningDialogFragment(); + Bundle args = new Bundle(1); + args.putInt(EXTRA_PASSWORD_QUALITY, passwordQuality); + fragment.setArguments(args); + return fragment; + } @Override - public int getDialogMetricsCategory(int dialogId) { - if (dialogId == ACCESSIBILITY_WARNING_DIALOG) { - return MetricsEvent.DIALOG_ENCRYPTION_INTERSTITIAL_ACCESSIBILITY; + public Dialog onCreateDialog(Bundle savedInstanceState) { + final int titleId; + final int messageId; + switch (getArguments().getInt(EXTRA_PASSWORD_QUALITY)) { + case DevicePolicyManager.PASSWORD_QUALITY_SOMETHING: + titleId = R.string.encrypt_talkback_dialog_require_pattern; + messageId = R.string.encrypt_talkback_dialog_message_pattern; + break; + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC: + case DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX: + titleId = R.string.encrypt_talkback_dialog_require_pin; + messageId = R.string.encrypt_talkback_dialog_message_pin; + break; + default: + titleId = R.string.encrypt_talkback_dialog_require_password; + messageId = R.string.encrypt_talkback_dialog_message_password; + break; } - return 0; + + + final Activity activity = getActivity(); + List<AccessibilityServiceInfo> list = + AccessibilityManager.getInstance(activity) + .getEnabledAccessibilityServiceList( + AccessibilityServiceInfo.FEEDBACK_ALL_MASK); + final CharSequence exampleAccessibility; + if (list.isEmpty()) { + // This should never happen. But we shouldn't crash + exampleAccessibility = ""; + } else { + exampleAccessibility = list.get(0).getResolveInfo() + .loadLabel(activity.getPackageManager()); + } + return new AlertDialog.Builder(activity) + .setTitle(titleId) + .setMessage(getString(messageId, exampleAccessibility)) + .setCancelable(true) + .setPositiveButton(android.R.string.ok, this) + .setNegativeButton(android.R.string.cancel, this) + .create(); } - private void setRequirePasswordState(boolean required) { - mPasswordRequired = required; + @Override + public int getMetricsCategory() { + return MetricsEvent.DIALOG_ENCRYPTION_INTERSTITIAL_ACCESSIBILITY; } @Override public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) { - setRequirePasswordState(true); - startLockIntent(); - } else if (which == DialogInterface.BUTTON_NEGATIVE) { - setRequirePasswordState(false); + EncryptionInterstitialFragment fragment = + (EncryptionInterstitialFragment) getParentFragment(); + if (fragment != null) { + if (which == DialogInterface.BUTTON_POSITIVE) { + fragment.setRequirePasswordState(true); + fragment.startLockIntent(); + } else if (which == DialogInterface.BUTTON_NEGATIVE) { + fragment.setRequirePasswordState(false); + } } } } |