Make QS shortcut as the default shortcut type only if it's an a11y tool

Bug: 333602196
Test: atest ToggleAccessibilityServicePreferenceFragmentTest
Flag: android.view.accessibility.a11y_qs_shortcut aconfig Nextfood
Change-Id: I108e8ab127bcae545b92166a0147f5fee89f9e94
This commit is contained in:
Chun-Ku Lin
2024-04-19 23:20:16 +00:00
parent 1946b4a669
commit 5b08a3d7ce
2 changed files with 100 additions and 25 deletions

View File

@@ -467,7 +467,10 @@ public class ToggleAccessibilityServicePreferenceFragment extends
@Override @Override
protected int getDefaultShortcutTypes() { protected int getDefaultShortcutTypes() {
if (android.view.accessibility.Flags.a11yQsShortcut()) { 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; : ShortcutConstants.UserShortcutType.QUICK_SETTINGS;
} }

View File

@@ -329,24 +329,18 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
} }
@Test @Test
public void getDefaultShortcutTypes_noAssociatedTile_softwareTypeIsDefault() { @DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
public void getDefaultShortcutTypes_noAssociatedTile_softwareTypeIsDefault() throws Throwable {
PreferredShortcuts.clearPreferredShortcuts(mContext); PreferredShortcuts.clearPreferredShortcuts(mContext);
when(mFragment.getTileComponentName()).thenReturn(null); setupAccessibilityServiceInfoForFragment(
/* isAccessibilityTool= */ true,
/* tileService= */ null
/* warningRequired= */);
assertThat(mFragment.getDefaultShortcutTypes()) assertThat(mFragment.getDefaultShortcutTypes())
.isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); .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 @Test
@DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) @DisableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
public void getDefaultShortcutTypes_hasAssociatedTile_softwareTypeIsDefault() { public void getDefaultShortcutTypes_hasAssociatedTile_softwareTypeIsDefault() {
@@ -357,13 +351,71 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
.isEqualTo(ShortcutConstants.UserShortcutType.SOFTWARE); .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 @Test
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_enableQsShortcut() public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_enableQsShortcut()
throws Throwable { throws Throwable {
PreferredShortcuts.clearPreferredShortcuts(mContext); PreferredShortcuts.clearPreferredShortcuts(mContext);
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); /* isAccessibilityTool= */ true,
/* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME
/* warningRequired= */);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -380,8 +432,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_enableSoftwareShortcut() public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_enableSoftwareShortcut()
throws Throwable { throws Throwable {
PreferredShortcuts.clearPreferredShortcuts(mContext); PreferredShortcuts.clearPreferredShortcuts(mContext);
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
when(mFragment.getTileComponentName()).thenReturn(null); /* isAccessibilityTool= */ true,
/* tileService= */ null
/* warningRequired= */);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -398,8 +452,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_flagOff_enableSoftwareShortcut() public void toggleShortcutPreference_noUserPreferredShortcut_hasQsTile_flagOff_enableSoftwareShortcut()
throws Throwable { throws Throwable {
PreferredShortcuts.clearPreferredShortcuts(mContext); PreferredShortcuts.clearPreferredShortcuts(mContext);
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME); /* isAccessibilityTool= */ true,
/* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME
/* warningRequired= */);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -416,8 +472,10 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_flagOff_enableSoftwareShortcut() public void toggleShortcutPreference_noUserPreferredShortcut_noQsTile_flagOff_enableSoftwareShortcut()
throws Throwable { throws Throwable {
PreferredShortcuts.clearPreferredShortcuts(mContext); PreferredShortcuts.clearPreferredShortcuts(mContext);
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
when(mFragment.getTileComponentName()).thenReturn(null); /* isAccessibilityTool= */ true,
/* tileService= */ null
/* warningRequired= */);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -433,12 +491,14 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
public void toggleShortcutPreference_userPreferVolumeKeysShortcut_noQsTile_enableVolumeKeysShortcut() public void toggleShortcutPreference_userPreferVolumeKeysShortcut_noQsTile_enableVolumeKeysShortcut()
throws Throwable { throws Throwable {
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
/* isAccessibilityTool= */ true,
/* tileService= */ null
/* warningRequired= */);
String componentName = mFragment.mComponentName.flattenToString(); String componentName = mFragment.mComponentName.flattenToString();
PreferredShortcuts.saveUserShortcutType( PreferredShortcuts.saveUserShortcutType(
mContext, mContext,
new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE)); new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE));
when(mFragment.getTileComponentName()).thenReturn(null);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -456,12 +516,14 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
@EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT) @EnableFlags(Flags.FLAG_A11Y_QS_SHORTCUT)
public void toggleShortcutPreference_userPreferVolumeKeysShortcut_hasQsTile_enableVolumeKeysShortcut() public void toggleShortcutPreference_userPreferVolumeKeysShortcut_hasQsTile_enableVolumeKeysShortcut()
throws Throwable { throws Throwable {
setupServiceWarningRequired(false); setupAccessibilityServiceInfoForFragment(
/* isAccessibilityTool= */ true,
/* tileService= */ PLACEHOLDER_TILE_COMPONENT_NAME
/* warningRequired= */);
String componentName = mFragment.mComponentName.flattenToString(); String componentName = mFragment.mComponentName.flattenToString();
PreferredShortcuts.saveUserShortcutType( PreferredShortcuts.saveUserShortcutType(
mContext, mContext,
new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE)); new PreferredShortcut(componentName, ShortcutConstants.UserShortcutType.HARDWARE));
when(mFragment.getTileComponentName()).thenReturn(PLACEHOLDER_TILE_COMPONENT_NAME);
mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null); mFragment.mShortcutPreference = new ShortcutPreference(mContext, /* attrs= */ null);
mFragment.mShortcutPreference.setChecked(true); mFragment.mShortcutPreference.setChecked(true);
@@ -499,6 +561,16 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
return info; 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 static class FakeServiceInfo extends ServiceInfo {
private String mTileName; private String mTileName;