From e383db25fc4ec53dc38fbbd47267e2e960159e37 Mon Sep 17 00:00:00 2001 From: menghanli Date: Tue, 18 Jan 2022 16:19:01 +0800 Subject: [PATCH] Add new tileService attributes for accessibility - Accessibilty service: AccessibilityService_tileService - Accesibility shortcut: AccessibilityShortcutTarget_tileService Bug: 216614718 Test: atest AccessibilityShortcutInfoTest Change-Id: I9394b689f0fea4ed6bf7399e6a0713200ca5a364 --- core/api/current.txt | 2 ++ .../AccessibilityServiceInfo.java | 24 +++++++++++++++++++ .../AccessibilityShortcutInfo.java | 21 ++++++++++++++++ core/res/res/values/attrs.xml | 10 ++++++++ core/res/res/values/public.xml | 1 + .../accessibility_shortcut_test_activity.xml | 11 +++++---- .../AccessibilityShortcutInfoTest.java | 11 ++++++++- 7 files changed, 74 insertions(+), 6 deletions(-) diff --git a/core/api/current.txt b/core/api/current.txt index 3db168566870f..d3defd8e78d5a 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -1565,6 +1565,7 @@ package android { field public static final int tileMode = 16843265; // 0x1010201 field public static final int tileModeX = 16843895; // 0x1010477 field public static final int tileModeY = 16843896; // 0x1010478 + field public static final int tileService; field public static final int timePickerDialogTheme = 16843934; // 0x101049e field public static final int timePickerMode = 16843956; // 0x10104b4 field public static final int timePickerStyle = 16843933; // 0x101049d @@ -3227,6 +3228,7 @@ package android.accessibilityservice { method public int getNonInteractiveUiTimeoutMillis(); method public android.content.pm.ResolveInfo getResolveInfo(); method public String getSettingsActivityName(); + method @Nullable public String getTileServiceClassName(); method public boolean isAccessibilityTool(); method public String loadDescription(android.content.pm.PackageManager); method public CharSequence loadSummary(android.content.pm.PackageManager); diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index 1167d0b1034f8..6988048c34e1e 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -536,6 +536,13 @@ public class AccessibilityServiceInfo implements Parcelable { */ private String mSettingsActivityName; + /** + * The class name of {@link android.service.quicksettings.TileService} is associated with this + * accessibility service for one to one mapping. It is used by system settings to remind users + * this accessibility service has a {@link android.service.quicksettings.TileService}. + */ + private String mTileServiceClassName; + /** * Bit mask with capabilities of this service. */ @@ -718,6 +725,8 @@ public class AccessibilityServiceInfo implements Parcelable { } mIsAccessibilityTool = asAttributes.getBoolean( R.styleable.AccessibilityService_isAccessibilityTool, false); + mTileServiceClassName = asAttributes.getString( + com.android.internal.R.styleable.AccessibilityService_tileService); asAttributes.recycle(); } catch (NameNotFoundException e) { throw new XmlPullParserException( "Unable to create context for: " @@ -820,6 +829,17 @@ public class AccessibilityServiceInfo implements Parcelable { return mSettingsActivityName; } + /** + * Gets the class name of {@link android.service.quicksettings.TileService} is associated with + * this accessibility service. + * + * @return The class names of {@link android.service.quicksettings.TileService}. + */ + @Nullable + public String getTileServiceClassName() { + return mTileServiceClassName; + } + /** * Gets the animated image resource id. * @@ -1083,6 +1103,7 @@ public class AccessibilityServiceInfo implements Parcelable { parcel.writeInt(mHtmlDescriptionRes); parcel.writeString(mNonLocalizedDescription); parcel.writeBoolean(mIsAccessibilityTool); + parcel.writeString(mTileServiceClassName); } private void initFromParcel(Parcel parcel) { @@ -1105,6 +1126,7 @@ public class AccessibilityServiceInfo implements Parcelable { mHtmlDescriptionRes = parcel.readInt(); mNonLocalizedDescription = parcel.readString(); mIsAccessibilityTool = parcel.readBoolean(); + mTileServiceClassName = parcel.readString(); } @Override @@ -1157,6 +1179,8 @@ public class AccessibilityServiceInfo implements Parcelable { stringBuilder.append(", "); stringBuilder.append("settingsActivityName: ").append(mSettingsActivityName); stringBuilder.append(", "); + stringBuilder.append("tileServiceClassName: ").append(mTileServiceClassName); + stringBuilder.append(", "); stringBuilder.append("summary: ").append(mNonLocalizedSummary); stringBuilder.append(", "); stringBuilder.append("isAccessibilityTool: ").append(mIsAccessibilityTool); diff --git a/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java b/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java index fe1cca53c78b5..52a1cad7fd880 100644 --- a/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityShortcutInfo.java @@ -95,6 +95,13 @@ public final class AccessibilityShortcutInfo { */ private String mSettingsActivityName; + /** + * The class name of {@link android.service.quicksettings.TileService} is associated with this + * accessibility shortcut target for one to one mapping. It is used by system settings to remind + * users this accessibility service has a {@link android.service.quicksettings.TileService}. + */ + private String mTileServiceClassName; + /** * Creates a new instance. * @@ -150,6 +157,9 @@ public final class AccessibilityShortcutInfo { // Get settings activity name mSettingsActivityName = asAttributes.getString( com.android.internal.R.styleable.AccessibilityShortcutTarget_settingsActivity); + // Get tile service class name + mTileServiceClassName = asAttributes.getString( + com.android.internal.R.styleable.AccessibilityShortcutTarget_tileService); asAttributes.recycle(); if ((mDescriptionResId == 0 && mHtmlDescriptionRes == 0) || mSummaryResId == 0) { @@ -258,6 +268,17 @@ public final class AccessibilityShortcutInfo { return mSettingsActivityName; } + /** + * Gets the class name of {@link android.service.quicksettings.TileService} is associated with + * this accessibility shortcut target. + * + * @return The class names of {@link android.service.quicksettings.TileService}. + */ + @Nullable + public String getTileServiceClassName() { + return mTileServiceClassName; + } + /** * Gets string resource by the given activity and resource id. */ diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index afe0f1bf00019..356830090b69c 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3914,6 +3914,11 @@ + + + + \ No newline at end of file diff --git a/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java b/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java index 8755131644782..76fb520c91bcd 100644 --- a/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java +++ b/core/tests/coretests/src/android/accessibilityservice/AccessibilityShortcutInfoTest.java @@ -50,6 +50,8 @@ import java.util.List; public class AccessibilityShortcutInfoTest { private static final String SETTINGS_ACTIVITY_NAME = "com.example.shortcut.target.SettingsActivity"; + private static final String TILE_SERVICE_NAME = + "com.example.shortcut.target.TileService"; private Context mTargetContext; private PackageManager mPackageManager; @@ -110,10 +112,17 @@ public class AccessibilityShortcutInfoTest { @Test public void testSettingsActivity() { - assertThat("Settings Activity is not correct", + assertThat("Settings activity is not correct", mShortcutInfo.getSettingsActivityName(), is(SETTINGS_ACTIVITY_NAME)); } + @Test + public void testTileService() { + assertThat("Tile service is not correct", + mShortcutInfo.getTileServiceClassName(), is(TILE_SERVICE_NAME)); + } + + @Test public void testEquals() { assertTrue(mShortcutInfo.equals(mShortcutInfo));