Show default a11y icon in shortcut menu
Making the shortcut menu icons consistent with those
in the main accessibility settings.
Bug: 74411102
Test: The list of CTS-installed services now have the
same default in both pages of settings.
Change-Id: I0deedb593e7ef8c8ef2b01ab836bb9f1c4bfd91b
diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
index 5b45cfa..a8a960f 100644
--- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
+++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java
@@ -26,7 +26,9 @@
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Binder;
import android.os.Bundle;
@@ -34,7 +36,6 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.text.TextUtils;
-import android.util.IconDrawableFactory;
import android.view.accessibility.AccessibilityManager;
import com.android.internal.accessibility.AccessibilityShortcutController;
@@ -45,7 +46,6 @@
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.accessibility.AccessibilityUtils;
-import com.android.settingslib.applications.DefaultAppInfo;
import com.android.settingslib.widget.CandidateInfo;
import com.android.settingslib.wrapper.PackageManagerWrapper;
@@ -71,13 +71,11 @@
@Override
protected List<? extends CandidateInfo> getCandidates() {
final Context context = getContext();
- final PackageManager pm = context.getPackageManager();
final AccessibilityManager accessibilityManager = context
.getSystemService(AccessibilityManager.class);
final List<AccessibilityServiceInfo> installedServices =
accessibilityManager.getInstalledAccessibilityServiceList();
final int numInstalledServices = installedServices.size();
- final PackageManagerWrapper pmw = new PackageManagerWrapper(context.getPackageManager());
final List<CandidateInfo> candidates = new ArrayList<>(numInstalledServices);
Map<ComponentName, ToggleableFrameworkFeatureInfo> frameworkFeatureInfoMap =
@@ -95,10 +93,7 @@
iconId, componentName.flattenToString()));
}
for (int i = 0; i < numInstalledServices; i++) {
- final AccessibilityServiceInfo installedServiceInfo = installedServices.get(i);
- candidates.add(new DefaultAppInfo(context, pmw, UserHandle.myUserId(),
- installedServiceInfo.getComponentName(),
- (String) installedServiceInfo.loadSummary(pm), true /* enabled */));
+ candidates.add(new ServiceCandidateInfo(installedServices.get(i)));
}
return candidates;
@@ -196,9 +191,9 @@
}
private class FrameworkCandidateInfo extends CandidateInfo {
- ToggleableFrameworkFeatureInfo mToggleableFrameworkFeatureInfo;
- int mIconResId;
- String mKey;
+ final ToggleableFrameworkFeatureInfo mToggleableFrameworkFeatureInfo;
+ final int mIconResId;
+ final String mKey;
public FrameworkCandidateInfo(
ToggleableFrameworkFeatureInfo frameworkFeatureInfo, int iconResId, String key) {
@@ -223,4 +218,49 @@
return mKey;
}
}
+
+ private class ServiceCandidateInfo extends CandidateInfo {
+ final AccessibilityServiceInfo mServiceInfo;
+
+ public ServiceCandidateInfo(AccessibilityServiceInfo serviceInfo) {
+ super(true /* enabled */);
+ mServiceInfo = serviceInfo;
+ }
+
+ @Override
+ public CharSequence loadLabel() {
+ final PackageManagerWrapper pmw =
+ new PackageManagerWrapper(getContext().getPackageManager());
+ final CharSequence label =
+ mServiceInfo.getResolveInfo().serviceInfo.loadLabel(pmw.getPackageManager());
+ if (label != null) {
+ return label;
+ }
+
+ final ComponentName componentName = mServiceInfo.getComponentName();
+ if (componentName != null) {
+ try {
+ final ApplicationInfo appInfo = pmw.getApplicationInfoAsUser(
+ componentName.getPackageName(), 0, UserHandle.myUserId());
+ return appInfo.loadLabel(pmw.getPackageManager());
+ } catch (PackageManager.NameNotFoundException e) {
+ return null;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public Drawable loadIcon() {
+ final ResolveInfo resolveInfo = mServiceInfo.getResolveInfo();
+ return (resolveInfo.getIconResource() == 0)
+ ? getContext().getDrawable(R.mipmap.ic_accessibility_generic)
+ : resolveInfo.loadIcon(getContext().getPackageManager());
+ }
+
+ @Override
+ public String getKey() {
+ return mServiceInfo.getComponentName().flattenToString();
+ }
+ }
}