Customized accessibility framework features quick setting tooltips content

- Lowercase for one-handed mode, color correction, color inversion, extra dim in quick settings tooltips if these words are not first words.

Bug: 220655084
Test: make RunSettingsRoboTests ROBOTEST_FILTER=AccessibilityShortcutPreferenceFragmentTest ToggleFeaturePreferenceFragmentTest LaunchAccessibilityActivityPreferenceFragmentTest ToggleAccessibilityServicePreferenceFragmentTest
Change-Id: I309ca48cecb80942112c9d5adde5857c062706c8
This commit is contained in:
menghanli
2022-03-08 10:50:03 +08:00
parent 21419dc937
commit 99a9171108
15 changed files with 230 additions and 112 deletions

View File

@@ -73,6 +73,8 @@ public class AccessibilityShortcutPreferenceFragmentTest {
PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_CLASS_NAME);
private static final ComponentName PLACEHOLDER_TILE_COMPONENT_NAME = new ComponentName(
PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME);
private static final String PLACEHOLDER_TILE_TOOLTIP_CONTENT =
PLACEHOLDER_PACKAGE_NAME + "tooltip_content";
private static final String PLACEHOLDER_DIALOG_TITLE = "title";
private static final String SOFTWARE_SHORTCUT_KEY =
@@ -281,8 +283,8 @@ public class AccessibilityShortcutPreferenceFragmentTest {
}
@Override
protected CharSequence getTileName() {
return PLACEHOLDER_PACKAGE_NAME;
protected CharSequence getTileTooltipContent(@QuickSettingsTooltipType int type) {
return PLACEHOLDER_TILE_TOOLTIP_CONTENT;
}
@Override

View File

@@ -34,6 +34,9 @@ import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,8 +47,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPackageManager;
import java.util.Arrays;
/** Tests for {@link LaunchAccessibilityActivityPreferenceFragment} */
@RunWith(RobolectricTestRunner.class)
public class LaunchAccessibilityActivityPreferenceFragmentTest {
@@ -83,53 +84,91 @@ public class LaunchAccessibilityActivityPreferenceFragmentTest {
}
@Test
public void getTileName_noTileServiceAssigned_returnNull() {
assertThat(mFragment.getTileName()).isNull();
public void getTileTooltipContent_noTileServiceAssigned_returnNull() {
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
assertThat(tileTooltipContent).isNull();
}
@Test
public void getTileName_hasOneTileService_haveMatchString() {
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
final ResolveInfo info = new ResolveInfo();
info.serviceInfo = new FakeServiceInfo();
info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
final ShadowPackageManager shadowPackageManager =
Shadows.shadowOf(mContext.getPackageManager());
shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info));
public void getTileTooltipContent_hasOneTileService_guideToEdit_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
final CharSequence tileName = mFragment.getTileName();
assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(R.string.accessibility_service_qs_tooltips_content, tileName));
}
@Test
public void getTileName_hasTwoTileServices_haveMatchString() {
public void getTileTooltipContent_hasOneTileService_guideToDirectUse_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(
R.string.accessibility_service_auto_added_qs_tooltips_content, tileName));
}
@Test
public void getTileTooltipContent_hasTwoTileServices_guideToEdit_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME2,
PLACEHOLDER_TILE_NAME2);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(R.string.accessibility_service_qs_tooltips_content, tileName));
}
@Test
public void getTileTooltipContent_hasTwoTileServices_guideToDirectUse_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME2,
PLACEHOLDER_TILE_NAME2);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(
R.string.accessibility_service_auto_added_qs_tooltips_content, tileName));
}
private void setupTileService(String packageName, String name, String tileName) {
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
final ResolveInfo info = new ResolveInfo();
info.serviceInfo = new FakeServiceInfo();
info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
final ResolveInfo info2 = new ResolveInfo();
info2.serviceInfo = new FakeServiceInfo2();
info2.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info2.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME2;
info.serviceInfo = new FakeServiceInfo(packageName, name, tileName);
final ShadowPackageManager shadowPackageManager =
Shadows.shadowOf(mContext.getPackageManager());
shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info, info2));
final CharSequence tileName = mFragment.getTileName();
assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
shadowPackageManager.addResolveInfoForIntent(tileProbe, info);
}
private static class FakeServiceInfo extends ServiceInfo {
public String loadLabel(PackageManager mgr) {
return PLACEHOLDER_TILE_NAME;
}
}
private String mTileName;
FakeServiceInfo(String packageName, String name, String tileName) {
this.packageName = packageName;
this.name = name;
mTileName = tileName;
}
private static class FakeServiceInfo2 extends ServiceInfo {
public String loadLabel(PackageManager mgr) {
return PLACEHOLDER_TILE_NAME2;
return mTileName;
}
}

View File

@@ -34,6 +34,9 @@ import androidx.preference.PreferenceManager;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -44,8 +47,6 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPackageManager;
import java.util.Arrays;
/** Tests for {@link ToggleAccessibilityServicePreferenceFragment} */
@RunWith(RobolectricTestRunner.class)
public class ToggleAccessibilityServicePreferenceFragmentTest {
@@ -83,53 +84,91 @@ public class ToggleAccessibilityServicePreferenceFragmentTest {
}
@Test
public void getTileName_noTileServiceAssigned_returnNull() {
assertThat(mFragment.getTileName()).isNull();
public void getTileTooltipContent_noTileServiceAssigned_returnNull() {
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
assertThat(tileTooltipContent).isNull();
}
@Test
public void getTileName_hasOneTileService_haveMatchString() {
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
final ResolveInfo info = new ResolveInfo();
info.serviceInfo = new FakeServiceInfo();
info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
final ShadowPackageManager shadowPackageManager =
Shadows.shadowOf(mContext.getPackageManager());
shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info));
public void getTileTooltipContent_hasOneTileService_guideToEdit_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
final CharSequence tileName = mFragment.getTileName();
assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(R.string.accessibility_service_qs_tooltips_content, tileName));
}
@Test
public void getTileName_hasTwoTileServices_haveMatchString() {
public void getTileTooltipContent_hasOneTileService_guideToDirectUse_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(
R.string.accessibility_service_auto_added_qs_tooltips_content, tileName));
}
@Test
public void getTileTooltipContent_hasTwoTileServices_guideToEdit_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME2,
PLACEHOLDER_TILE_NAME2);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_EDIT);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(R.string.accessibility_service_qs_tooltips_content, tileName));
}
@Test
public void getTileTooltipContent_hasTwoTileServices_guideToDirectUse_haveMatchString() {
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME,
PLACEHOLDER_TILE_NAME);
setupTileService(PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME2,
PLACEHOLDER_TILE_NAME2);
final CharSequence tileTooltipContent =
mFragment.getTileTooltipContent(QuickSettingsTooltipType.GUIDE_TO_DIRECT_USE);
final CharSequence tileName =
mFragment.loadTileLabel(mContext, mFragment.getTileComponentName());
assertThat(tileTooltipContent.toString()).isEqualTo(
mContext.getString(
R.string.accessibility_service_auto_added_qs_tooltips_content, tileName));
}
private void setupTileService(String packageName, String name, String tileName) {
final Intent tileProbe = new Intent(TileService.ACTION_QS_TILE);
final ResolveInfo info = new ResolveInfo();
info.serviceInfo = new FakeServiceInfo();
info.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME;
final ResolveInfo info2 = new ResolveInfo();
info2.serviceInfo = new FakeServiceInfo2();
info2.serviceInfo.packageName = PLACEHOLDER_PACKAGE_NAME;
info2.serviceInfo.name = PLACEHOLDER_TILE_CLASS_NAME2;
info.serviceInfo = new FakeServiceInfo(packageName, name, tileName);
final ShadowPackageManager shadowPackageManager =
Shadows.shadowOf(mContext.getPackageManager());
shadowPackageManager.setResolveInfosForIntent(tileProbe, Arrays.asList(info, info2));
final CharSequence tileName = mFragment.getTileName();
assertThat(tileName.toString()).isEqualTo(PLACEHOLDER_TILE_NAME);
shadowPackageManager.addResolveInfoForIntent(tileProbe, info);
}
private static class FakeServiceInfo extends ServiceInfo {
public String loadLabel(PackageManager mgr) {
return PLACEHOLDER_TILE_NAME;
}
}
private String mTileName;
FakeServiceInfo(String packageName, String name, String tileName) {
this.packageName = packageName;
this.name = name;
mTileName = tileName;
}
private static class FakeServiceInfo2 extends ServiceInfo {
public String loadLabel(PackageManager mgr) {
return PLACEHOLDER_TILE_NAME2;
return mTileName;
}
}

View File

@@ -49,6 +49,7 @@ import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityDialogUtils.DialogType;
import com.android.settings.accessibility.AccessibilityUtil.QuickSettingsTooltipType;
import com.android.settings.accessibility.AccessibilityUtil.UserShortcutType;
import com.android.settings.testutils.shadow.ShadowFragment;
import com.android.settingslib.widget.TopIntroPreference;
@@ -77,8 +78,8 @@ public class ToggleFeaturePreferenceFragmentTest {
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
private static final ComponentName PLACEHOLDER_TILE_COMPONENT_NAME = new ComponentName(
PLACEHOLDER_PACKAGE_NAME, PLACEHOLDER_TILE_CLASS_NAME);
private static final String PLACEHOLDER_TILE_NAME =
PLACEHOLDER_PACKAGE_NAME + "tile.placeholder";
private static final String PLACEHOLDER_TILE_TOOLTIP_CONTENT =
PLACEHOLDER_PACKAGE_NAME + "tooltip_content";
private static final String PLACEHOLDER_DIALOG_TITLE = "title";
private static final String DEFAULT_SUMMARY = "default summary";
private static final String DEFAULT_DESCRIPTION = "default description";
@@ -361,8 +362,8 @@ public class ToggleFeaturePreferenceFragmentTest {
}
@Override
CharSequence getTileName() {
return PLACEHOLDER_TILE_NAME;
protected CharSequence getTileTooltipContent(@QuickSettingsTooltipType int type) {
return PLACEHOLDER_TILE_TOOLTIP_CONTENT;
}
@Override