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:
@@ -17,6 +17,7 @@
|
|||||||
package com.android.settings;
|
package com.android.settings;
|
||||||
|
|
||||||
import android.accessibilityservice.AccessibilityServiceInfo;
|
import android.accessibilityservice.AccessibilityServiceInfo;
|
||||||
|
import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.app.admin.DevicePolicyManager;
|
import android.app.admin.DevicePolicyManager;
|
||||||
@@ -29,11 +30,12 @@ import android.view.LayoutInflater;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.accessibility.AccessibilityManager;
|
import android.view.accessibility.AccessibilityManager;
|
||||||
import android.widget.Button;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
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 com.android.setupwizardlib.GlifLayout;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -74,10 +76,8 @@ public class EncryptionInterstitial extends SettingsActivity {
|
|||||||
layout.setFitsSystemWindows(false);
|
layout.setFitsSystemWindows(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class EncryptionInterstitialFragment extends SettingsPreferenceFragment
|
public static class EncryptionInterstitialFragment extends InstrumentedFragment
|
||||||
implements View.OnClickListener, DialogInterface.OnClickListener {
|
implements View.OnClickListener {
|
||||||
|
|
||||||
private static final int ACCESSIBILITY_WARNING_DIALOG = 1;
|
|
||||||
|
|
||||||
private View mRequirePasswordToDecrypt;
|
private View mRequirePasswordToDecrypt;
|
||||||
private View mDontRequirePasswordToDecrypt;
|
private View mDontRequirePasswordToDecrypt;
|
||||||
@@ -164,7 +164,10 @@ public class EncryptionInterstitial extends SettingsActivity {
|
|||||||
final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
|
final boolean accEn = AccessibilityManager.getInstance(getActivity()).isEnabled();
|
||||||
if (accEn && !mPasswordRequired) {
|
if (accEn && !mPasswordRequired) {
|
||||||
setRequirePasswordState(false); // clear the UI state
|
setRequirePasswordState(false); // clear the UI state
|
||||||
showDialog(ACCESSIBILITY_WARNING_DIALOG);
|
AccessibilityWarningDialogFragment.newInstance(mRequestedPasswordQuality)
|
||||||
|
.show(
|
||||||
|
getChildFragmentManager(),
|
||||||
|
AccessibilityWarningDialogFragment.TAG);
|
||||||
} else {
|
} else {
|
||||||
setRequirePasswordState(true);
|
setRequirePasswordState(true);
|
||||||
startLockIntent();
|
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) {
|
private void setRequirePasswordState(boolean required) {
|
||||||
mPasswordRequired = 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
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
if (which == DialogInterface.BUTTON_POSITIVE) {
|
EncryptionInterstitialFragment fragment =
|
||||||
setRequirePasswordState(true);
|
(EncryptionInterstitialFragment) getParentFragment();
|
||||||
startLockIntent();
|
if (fragment != null) {
|
||||||
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
|
if (which == DialogInterface.BUTTON_POSITIVE) {
|
||||||
setRequirePasswordState(false);
|
fragment.setRequirePasswordState(true);
|
||||||
|
fragment.startLockIntent();
|
||||||
|
} else if (which == DialogInterface.BUTTON_NEGATIVE) {
|
||||||
|
fragment.setRequirePasswordState(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user