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
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user