Merge "Show customized message for private space lock setup screen" into main
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 84bef3e..6fbaddc 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4612,7 +4612,7 @@
<string name="accessibility_screen_magnification_navbar_short_summary">Tap a button to zoom</string>
<!-- Intro for the accessibility preference screen to enable screen magnification gestures. [CHAR LIMIT=none] -->
<string name="accessibility_screen_magnification_intro_text">Quickly zoom in on the screen to make content larger</string>
- <!-- Summary for the accessibility preference screen to enable screen magnification gestures. [CHAR LIMIT=none] -->
+ <!-- Instructions on the accessibility preference screen teaching the user how to enable screen magnification gestures. [CHAR LIMIT=none] -->
<string name="accessibility_screen_magnification_summary">
<![CDATA[
<b>To zoom in:</b><br/>
@@ -12565,8 +12565,8 @@
<string name="color_inversion_state_off">Off</string>
<!-- The color inversion feature summary displayed as a subtext as an item in a list. -->
<string name="color_inversion_feature_summary">Turns light screens dark and dark screens light</string>
- <!-- Short summary explains what magnification feature is. -->
- <string name="magnification_feature_summary">Quickly zoom in on the screen to make content larger</string>
+ <!-- Summary for the accessibility preference screen to enable screen magnification. [CHAR LIMIT=none] -->
+ <string name="magnification_feature_summary">Zoom in on the screen</string>
<!-- Summary of the AutoClick feature disabled state. -->
<string name="autoclick_disabled">Off</string>
<!-- Summary of the show captions preference disabled state. -->
diff --git a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
index 1ecb94a..21ac998 100644
--- a/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/InvisibleToggleAccessibilityServicePreferenceFragment.java
@@ -64,7 +64,7 @@
@Override
void onDialogButtonFromShortcutToggleClicked(View view) {
super.onDialogButtonFromShortcutToggleClicked(view);
- if (!android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
+ if (!android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
if (view.getId() == R.id.permission_enable_allow_button) {
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName,
true);
@@ -80,7 +80,7 @@
@Override
void onAllowButtonFromShortcutToggleClicked() {
super.onAllowButtonFromShortcutToggleClicked();
- if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, true);
}
}
diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
index 213f108..dd6c1d4 100644
--- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java
@@ -157,7 +157,7 @@
if (info == null) {
return null;
}
- if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
@@ -175,7 +175,7 @@
if (info == null) {
return null;
}
- if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
@@ -193,7 +193,7 @@
if (info == null) {
return null;
}
- if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
@@ -332,13 +332,18 @@
final int shortcutTypes = retrieveUserShortcutType(getPrefContext(),
mComponentName.flattenToString(), UserShortcutType.SOFTWARE);
if (preference.isChecked()) {
- if (!mToggleServiceSwitchPreference.isChecked()) {
+ final boolean isWarningRequired;
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
+ isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
+ .isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
+ } else {
+ isWarningRequired = !mToggleServiceSwitchPreference.isChecked();
+ }
+ if (isWarningRequired) {
preference.setChecked(false);
showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE);
} else {
- AccessibilityUtil.optInAllValuesToSettings(getPrefContext(), shortcutTypes,
- mComponentName);
- showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
+ onAllowButtonFromShortcutToggleClicked();
}
} else {
AccessibilityUtil.optOutAllValuesFromSettings(getPrefContext(), shortcutTypes,
@@ -349,10 +354,20 @@
@Override
public void onSettingsClicked(ShortcutPreference preference) {
- final boolean isServiceOnOrShortcutAdded = mShortcutPreference.isChecked()
- || mToggleServiceSwitchPreference.isChecked();
- showPopupDialog(isServiceOnOrShortcutAdded ? DialogEnums.EDIT_SHORTCUT
- : DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
+ final boolean isWarningRequired;
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
+ isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
+ .isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
+ } else {
+ isWarningRequired = !(mShortcutPreference.isChecked()
+ || mToggleServiceSwitchPreference.isChecked());
+ }
+
+ if (isWarningRequired) {
+ showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
+ } else {
+ onAllowButtonFromShortcutClicked();
+ }
}
@Override
@@ -467,7 +482,9 @@
mIsDialogShown.set(false);
showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
}
- mWarningDialog.dismiss();
+ if (mWarningDialog != null) {
+ mWarningDialog.dismiss();
+ }
}
private void onDenyButtonFromEnableToggleClicked() {
@@ -496,7 +513,9 @@
mIsDialogShown.set(false);
showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
- mWarningDialog.dismiss();
+ if (mWarningDialog != null) {
+ mWarningDialog.dismiss();
+ }
mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
}
@@ -522,7 +541,9 @@
mIsDialogShown.set(false);
showPopupDialog(DialogEnums.EDIT_SHORTCUT);
- mWarningDialog.dismiss();
+ if (mWarningDialog != null) {
+ mWarningDialog.dismiss();
+ }
}
private void onDenyButtonFromShortcutClicked() {
@@ -534,13 +555,17 @@
mToggleServiceSwitchPreference.setChecked(false);
getArguments().putBoolean(AccessibilitySettings.EXTRA_CHECKED,
/* disableService */ false);
- if (!mShortcutPreference.isChecked()) {
+ final boolean isWarningRequired;
+ if (android.view.accessibility.Flags.cleanupAccessibilityWarningDialog()) {
+ isWarningRequired = getPrefContext().getSystemService(AccessibilityManager.class)
+ .isAccessibilityServiceWarningRequired(getAccessibilityServiceInfo());
+ } else {
+ isWarningRequired = !mShortcutPreference.isChecked();
+ }
+ if (isWarningRequired) {
showPopupDialog(DialogEnums.ENABLE_WARNING_FROM_TOGGLE);
} else {
- handleConfirmServiceEnabled(/* confirmed= */ true);
- if (serviceSupportsAccessibilityButton()) {
- showPopupDialog(DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
- }
+ onAllowButtonFromEnableToggleClicked();
}
} else {
mToggleServiceSwitchPreference.setChecked(true);
diff --git a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
index 886719d..9f6eec3 100644
--- a/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
+++ b/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragment.java
@@ -840,9 +840,13 @@
*/
public static CharSequence getServiceSummary(Context context) {
// Get the user shortcut type from settings provider.
- final int uerShortcutType = getUserShortcutTypeFromSettings(context);
- return (uerShortcutType != AccessibilityUtil.UserShortcutType.EMPTY)
+ final int userShortcutType = getUserShortcutTypeFromSettings(context);
+ final CharSequence featureState =
+ (userShortcutType != AccessibilityUtil.UserShortcutType.EMPTY)
? context.getText(R.string.accessibility_summary_shortcut_enabled)
: context.getText(R.string.generic_accessibility_feature_shortcut_off);
+ final CharSequence featureSummary = context.getText(R.string.magnification_feature_summary);
+ return context.getString(R.string.preference_summary_default_combination,
+ featureState, featureSummary);
}
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
index 94df37e..8cdb17e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java
@@ -18,6 +18,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -31,8 +32,13 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
+import android.os.Bundle;
+import android.platform.test.annotations.RequiresFlagsEnabled;
+import android.platform.test.flag.junit.CheckFlagsRule;
+import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.service.quicksettings.TileService;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.Flags;
import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
@@ -40,8 +46,10 @@
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
+import com.android.settings.widget.SettingsMainSwitchPreference;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Answers;
@@ -59,6 +67,9 @@
@RunWith(RobolectricTestRunner.class)
public class ToggleAccessibilityServicePreferenceFragmentTest {
+ @Rule
+ public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
+
private static final String PLACEHOLDER_PACKAGE_NAME = "com.placeholder.example";
private static final String PLACEHOLDER_PACKAGE_NAME2 = "com.placeholder.example2";
private static final String PLACEHOLDER_SERVICE_CLASS_NAME = "a11yservice1";
@@ -73,20 +84,25 @@
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
private static final String PLACEHOLDER_TILE_NAME2 =
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder2";
+ private static final int NO_DIALOG = -1;
private TestToggleAccessibilityServicePreferenceFragment mFragment;
private PreferenceScreen mScreen;
- private Context mContext = ApplicationProvider.getApplicationContext();
+ private Context mContext;
private ShadowAccessibilityManager mShadowAccessibilityManager;
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private PreferenceManager mPreferenceManager;
+ @Mock
+ private AccessibilityManager mMockAccessibilityManager;
@Before
public void setUpTestFragment() {
MockitoAnnotations.initMocks(this);
+ mContext = spy(ApplicationProvider.getApplicationContext());
mFragment = spy(new TestToggleAccessibilityServicePreferenceFragment());
+ mFragment.setArguments(new Bundle());
when(mFragment.getPreferenceManager()).thenReturn(mPreferenceManager);
when(mFragment.getPreferenceManager().getContext()).thenReturn(mContext);
when(mFragment.getContext()).thenReturn(mContext);
@@ -213,6 +229,86 @@
assertThat(mFragment.serviceSupportsAccessibilityButton()).isFalse();
}
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void enableService_warningRequired_showWarning() throws Throwable {
+ setupServiceWarningRequired(true);
+ mFragment.mToggleServiceSwitchPreference =
+ new SettingsMainSwitchPreference(mContext, /* attrs= */null);
+
+ mFragment.onCheckedChanged(null, true);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_TOGGLE);
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void enableService_warningNotRequired_dontShowWarning() throws Throwable {
+ final AccessibilityServiceInfo info = setupServiceWarningRequired(false);
+ mFragment.mToggleServiceSwitchPreference =
+ new SettingsMainSwitchPreference(mContext, /* attrs= */null);
+ mFragment.mPreferenceKey = info.getComponentName().flattenToString();
+
+ mFragment.onCheckedChanged(null, true);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void toggleShortcutPreference_warningRequired_showWarning() throws Throwable {
+ setupServiceWarningRequired(true);
+ mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
+
+ mFragment.mShortcutPreference.setChecked(true);
+ mFragment.onToggleClicked(mFragment.mShortcutPreference);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE);
+ assertThat(mFragment.mShortcutPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void toggleShortcutPreference_warningNotRequired_dontShowWarning() throws Throwable {
+ setupServiceWarningRequired(false);
+ mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
+
+ mFragment.mShortcutPreference.setChecked(true);
+ mFragment.onToggleClicked(mFragment.mShortcutPreference);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.LAUNCH_ACCESSIBILITY_TUTORIAL);
+ assertThat(mFragment.mShortcutPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void clickShortcutSettingsPreference_warningRequired_showWarning() throws Throwable {
+ setupServiceWarningRequired(true);
+ mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
+
+ mFragment.onSettingsClicked(mFragment.mShortcutPreference);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.ENABLE_WARNING_FROM_SHORTCUT);
+ }
+
+ @Test
+ @RequiresFlagsEnabled(Flags.FLAG_CLEANUP_ACCESSIBILITY_WARNING_DIALOG)
+ public void clickShortcutSettingsPreference_warningNotRequired_dontShowWarning()
+ throws Throwable {
+ setupServiceWarningRequired(false);
+ mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */null);
+
+ mFragment.onSettingsClicked(mFragment.mShortcutPreference);
+
+ assertThat(mFragment.mLastShownDialogId).isEqualTo(
+ AccessibilityDialogUtils.DialogEnums.EDIT_SHORTCUT);
+ }
+
private void setupTileService(String packageName, String name, String tileName) {
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
final ResolveInfo info = new ResolveInfo();
@@ -222,6 +318,21 @@
shadowPackageManager.addResolveInfoForIntent(tileProbe, info);
}
+ private AccessibilityServiceInfo setupServiceWarningRequired(boolean required)
+ throws Throwable {
+ final AccessibilityServiceInfo info = getFakeAccessibilityServiceInfo(
+ PLACEHOLDER_PACKAGE_NAME,
+ PLACEHOLDER_SERVICE_CLASS_NAME);
+ info.flags |= AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON;
+ mFragment.mComponentName = info.getComponentName();
+ when(mContext.getSystemService(AccessibilityManager.class))
+ .thenReturn(mMockAccessibilityManager);
+ when(mMockAccessibilityManager.isAccessibilityServiceWarningRequired(any()))
+ .thenReturn(required);
+ when(mFragment.getAccessibilityServiceInfo()).thenReturn(info);
+ return info;
+ }
+
private static class FakeServiceInfo extends ServiceInfo {
private String mTileName;
@@ -255,10 +366,16 @@
private static class TestToggleAccessibilityServicePreferenceFragment
extends ToggleAccessibilityServicePreferenceFragment {
+ int mLastShownDialogId = NO_DIALOG;
@Override
protected ComponentName getTileComponentName() {
return PLACEHOLDER_TILE_COMPONENT_NAME;
}
+
+ @Override
+ protected void showDialog(int dialogId) {
+ mLastShownDialogId = dialogId;
+ }
}
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
index e5ac793..05dc8fa 100644
--- a/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/ToggleScreenMagnificationPreferenceFragmentTest.java
@@ -629,7 +629,9 @@
assertThat(
ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext).toString())
.isEqualTo(
- mContext.getString(R.string.accessibility_summary_shortcut_enabled));
+ mContext.getString(R.string.preference_summary_default_combination,
+ mContext.getText(R.string.accessibility_summary_shortcut_enabled),
+ mContext.getText(R.string.magnification_feature_summary)));
}
@Test
@@ -639,7 +641,10 @@
assertThat(
ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext).toString())
.isEqualTo(
- mContext.getString(R.string.generic_accessibility_feature_shortcut_off));
+ mContext.getString(R.string.preference_summary_default_combination,
+ mContext.getText(
+ R.string.generic_accessibility_feature_shortcut_off),
+ mContext.getText(R.string.magnification_feature_summary)));
}
@Test
@@ -650,7 +655,10 @@
assertThat(
ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext).toString())
- .isEqualTo(mContext.getString(R.string.accessibility_summary_shortcut_enabled));
+ .isEqualTo(
+ mContext.getString(R.string.preference_summary_default_combination,
+ mContext.getText(R.string.accessibility_summary_shortcut_enabled),
+ mContext.getText(R.string.magnification_feature_summary)));
}
@Test
@@ -662,7 +670,10 @@
assertThat(
ToggleScreenMagnificationPreferenceFragment.getServiceSummary(mContext).toString())
.isEqualTo(
- mContext.getString(R.string.generic_accessibility_feature_shortcut_off));
+ mContext.getString(R.string.preference_summary_default_combination,
+ mContext.getText(
+ R.string.generic_accessibility_feature_shortcut_off),
+ mContext.getText(R.string.magnification_feature_summary)));
}
private void putStringIntoSettings(String key, String componentName) {