OSDN Git Service

Use InstrumentedFragment for EncryptionInterstitial
authorMaurice Lam <yukl@google.com>
Wed, 22 Mar 2017 00:57:55 +0000 (17:57 -0700)
committerMaurice Lam <yukl@google.com>
Thu, 23 Mar 2017 01:41:46 +0000 (18:41 -0700)
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

src/com/android/settings/EncryptionInterstitial.java

index 42ca516..ed9596d 100644 (file)
@@ -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);
+                }
             }
         }
     }