diff --git a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java index 72e1ad8eb93..cf9c78f1cc9 100644 --- a/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragment.java @@ -467,7 +467,10 @@ public class ToggleAccessibilityServicePreferenceFragment extends @Override protected int getDefaultShortcutTypes() { if (android.view.accessibility.Flags.a11yQsShortcut()) { - return getTileComponentName() == null ? super.getDefaultShortcutTypes() + AccessibilityServiceInfo info = getAccessibilityServiceInfo(); + boolean isAccessibilityTool = info != null && info.isAccessibilityTool(); + return !isAccessibilityTool || getTileComponentName() == null + ? super.getDefaultShortcutTypes() : ShortcutConstants.UserShortcutType.QUICK_SETTINGS; } diff --git a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java index 9be03e8d249..552236124bc 100644 --- a/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accessibility/ToggleAccessibilityServicePreferenceFragmentTest.java @@ -329,24 +329,18 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { } @Test - public void getDefaultShortcutTypes_noAssociatedTile_softwareTypeIsDefault() { + @DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + public void getDefaultShortcutTypes_noAssociatedTile_softwareTypeIsDefault() throws Throwable { PreferredShortcuts.clearPreferredShortcuts(mContext); - when(mFragment.getTileComponentName()).thenReturn(null); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ null + /* warningRequired= */); assertThat(mFragment.getDefaultShortcutTypes()) .isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); } - @Test - @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) - public void getDefaultShortcutTypes_hasAssociatedTile_qsTypeIsDefault() { - PreferredShortcuts.clearPreferredShortcuts(mContext); - when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); - - assertThat(mFragment.getDefaultShortcutTypes()) - .isEqualTo(ShortcutConstants.UserShortcutType.QUICK_SETTINGS); - } - @Test @DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) public void getDefaultShortcutTypes_hasAssociatedTile_softwareTypeIsDefault() { @@ -357,13 +351,71 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { .isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); } + @Test + @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + public void getDefaultShortcutTypes_isAccessibilityTool_hasAssociatedTile_qsTypeIsDefault() + throws Throwable { + PreferredShortcuts.clearPreferredShortcuts(mContext); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME + /* warningRequired= */); + + assertThat(mFragment.getDefaultShortcutTypes()) + .isEqualTo(ShortcutConstants.UserShortcutType.QUICK_SETTINGS); + } + + @Test + @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + public void getDefaultShortcutTypes_isNotAccessibilityTool_hasAssociatedTile_softwareTypeIsDefault() + throws Throwable { + PreferredShortcuts.clearPreferredShortcuts(mContext); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ false, + /* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME + /* warningRequired= */); + + assertThat(mFragment.getDefaultShortcutTypes()) + .isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); + } + + @Test + @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + public void getDefaultShortcutTypes_isAccessibilityTool_noAssociatedTile_softwareTypeIsDefault() + throws Throwable { + PreferredShortcuts.clearPreferredShortcuts(mContext); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ null + /* warningRequired= */); + + assertThat(mFragment.getDefaultShortcutTypes()) + .isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); + } + + @Test + @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) + public void getDefaultShortcutTypes_isNotAccessibilityTool_noAssociatedTile_softwareTypeIsDefault() + throws Throwable { + PreferredShortcuts.clearPreferredShortcuts(mContext); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ false, + /* tileService= */ null + /* warningRequired= */); + + assertThat(mFragment.getDefaultShortcutTypes()) + .isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); + } + @Test @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_enableQsShortcut() throws Throwable { PreferredShortcuts.clearPreferredShortcuts(mContext); - setupServiceWarningRequired(false); - when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME + /* warningRequired= */); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -380,8 +432,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_enableSoftwareShortcut() throws Throwable { PreferredShortcuts.clearPreferredShortcuts(mContext); - setupServiceWarningRequired(false); - when(mFragment.getTileComponentName()).thenReturn(null); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ null + /* warningRequired= */); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -398,8 +452,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_flagOff_enableSoftwareShortcut() throws Throwable { PreferredShortcuts.clearPreferredShortcuts(mContext); - setupServiceWarningRequired(false); - when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME + /* warningRequired= */); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -416,8 +472,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_flagOff_enableSoftwareShortcut() throws Throwable { PreferredShortcuts.clearPreferredShortcuts(mContext); - setupServiceWarningRequired(false); - when(mFragment.getTileComponentName()).thenReturn(null); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ null + /* warningRequired= */); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -433,12 +491,14 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) public void toggleShortcutPreference_userPreferVolumeKeysShortcut_noQsTile_enableVolumeKeysShortcut() throws Throwable { - setupServiceWarningRequired(false); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ null + /* warningRequired= */); String componentName = mFragment.mComponentName.flattenToString(); PreferredShortcuts.saveUserShortcutType( mContext, new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE)); - when(mFragment.getTileComponentName()).thenReturn(null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -456,12 +516,14 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) public void toggleShortcutPreference_userPreferVolumeKeysShortcut_hasQsTile_enableVolumeKeysShortcut() throws Throwable { - setupServiceWarningRequired(false); + setupAccessibilityServiceInfoForFragment( + /* isAccessibilityTool= */ true, + /* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME + /* warningRequired= */); String componentName = mFragment.mComponentName.flattenToString(); PreferredShortcuts.saveUserShortcutType( mContext, new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE)); - when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference.setChecked(true); @@ -499,6 +561,16 @@ public class ToggleAccessibilityServicePreferenceFragmentTest { return info; } + private void setupAccessibilityServiceInfoForFragment( + boolean isAccessibilityTool, ComponentName tileService) throws Throwable { + AccessibilityServiceInfo info = setupServiceWarningRequired(false); + info.setAccessibilityTool(isAccessibilityTool); + mShadowAccessibilityManager.setInstalledAccessibilityServiceList(List.of(info)); + mFragment.mComponentName = info.getComponentName(); + when(mFragment.getTileComponentName()).thenReturn(tileService); + when(mFragment.getAccessibilityServiceInfo()).thenReturn(info); + } + private static class FakeServiceInfo extends ServiceInfo { private String mTileName;