summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Peter_Liang <peterliang@google.com> 2020-03-26 12:27:21 +0800
committer Peter_Liang <peterliang@google.com> 2020-03-26 12:27:21 +0800
commitee74b0ea906db7447fd33355351c625dd782139c (patch)
tree879d25dcc7adebc3fa39820ca2c63a2e343980d7
parent5bd455ac5f0f09280ae59e3eeb74ea7e3b7e4823 (diff)
Fix the duplicate components in edit shortcut menu list.
Root cause: After android R, will have new feature about AccessibilityShortcutInfo let developers to apply that in their service. But if the service have the both features that AccessibilityServiceInfo and AccessibilityShortcutInfo, the framework will make AccessibilityShortcutInfo priority higher than AccessibilityServiceInfo. Goal: Filter tagert list in advance. Bug: 152464317 Test: manual test Change-Id: I93d2886ee686c939b8b6c4cf67b045392e9d9b51
-rw-r--r--core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java32
1 files changed, 30 insertions, 2 deletions
diff --git a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java b/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
index c40864131a2e..51b13345a6c3 100644
--- a/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
+++ b/core/java/com/android/internal/app/AccessibilityButtonChooserActivity.java
@@ -169,13 +169,41 @@ public class AccessibilityButtonChooserActivity extends Activity {
private static List<AccessibilityButtonTarget> getInstalledServiceTargets(
@NonNull Context context) {
final List<AccessibilityButtonTarget> targets = new ArrayList<>();
- targets.addAll(getAccessibilityServiceTargets(context));
- targets.addAll(getAccessibilityActivityTargets(context));
+ targets.addAll(getAccessibilityFilteredTargets(context));
targets.addAll(getWhiteListingServiceTargets(context));
return targets;
}
+ private static List<AccessibilityButtonTarget> getAccessibilityFilteredTargets(
+ @NonNull Context context) {
+ final List<AccessibilityButtonTarget> serviceTargets =
+ getAccessibilityServiceTargets(context);
+ final List<AccessibilityButtonTarget> activityTargets =
+ getAccessibilityActivityTargets(context);
+
+ for (AccessibilityButtonTarget activityTarget : activityTargets) {
+ serviceTargets.removeIf(serviceTarget -> {
+ final ComponentName serviceComponentName =
+ ComponentName.unflattenFromString(serviceTarget.getId());
+ final ComponentName activityComponentName =
+ ComponentName.unflattenFromString(activityTarget.getId());
+ final boolean isSamePackageName = activityComponentName.getPackageName().equals(
+ serviceComponentName.getPackageName());
+ final boolean isSameLabel = activityTarget.getLabel().equals(
+ serviceTarget.getLabel());
+
+ return isSamePackageName && isSameLabel;
+ });
+ }
+
+ final List<AccessibilityButtonTarget> targets = new ArrayList<>();
+ targets.addAll(serviceTargets);
+ targets.addAll(activityTargets);
+
+ return targets;
+ }
+
private static List<AccessibilityButtonTarget> getAccessibilityServiceTargets(
@NonNull Context context) {
final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class);