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
This commit is contained in:
Maurice Lam
2017-03-21 17:57:55 -07:00
parent 9be96e06bb
commit 18d7965a11

View 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();
}
}
@Override
public int getDialogMetricsCategory(int dialogId) {
if (dialogId == ACCESSIBILITY_WARNING_DIALOG) {
return MetricsEvent.DIALOG_ENCRYPTION_INTERSTITIAL_ACCESSIBILITY;
}
return 0;
}
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 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;
}
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();
}
@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);
}
}
}
}