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
This commit is contained in:
Phil Weaver
2018-03-08 17:46:49 -08:00
parent 5218829f68
commit fcfdeb7cb5

View File

@@ -26,7 +26,9 @@ import android.app.Fragment;
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.IBinder;
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.core.instrumentation.InstrumentedDialogFragment;
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 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
@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 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
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 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
}
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 @@ public class ShortcutServicePickerFragment extends RadioButtonPickerFragment {
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();
}
}
}