Convert more loadIcon() to IconDrawableFactory

- AppGridView: used by preview chart in display size setting.
- DefaultBrowserPreferenceController: default browser icon in default
  apps settings
- Enterprise application list
- Accessibility search result loader

Change-Id: Ibd12cd8854c68760ea3428fffa735bcbba48a277
Fixes: 64336923
Test: robotests
This commit is contained in:
Fan Zhang
2017-10-17 17:04:04 -07:00
parent 5317e70be1
commit abdeead114
5 changed files with 129 additions and 10 deletions

View File

@@ -21,7 +21,10 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.UserHandle;
import android.support.annotation.VisibleForTesting;
import android.util.AttributeSet;
import android.util.IconDrawableFactory;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
@@ -63,7 +66,8 @@ public class AppGridView extends GridView {
/**
* Loads application labels and icons.
*/
private static class AppsAdapter extends ArrayAdapter<ActivityEntry> {
@VisibleForTesting
public static class AppsAdapter extends ArrayAdapter<ActivityEntry> {
private final PackageManager mPackageManager;
private final int mIconResId;
@@ -80,9 +84,8 @@ public class AppGridView extends GridView {
public View getView(int position, View convertView, ViewGroup parent) {
final View view = super.getView(position, convertView, parent);
final ActivityEntry entry = getItem(position);
final ImageView iconView = (ImageView) view.findViewById(mIconResId);
final Drawable icon = entry.info.loadIcon(mPackageManager);
iconView.setImageDrawable(icon);
final ImageView iconView = view.findViewById(mIconResId);
iconView.setImageDrawable(entry.getIcon());
return view;
}
@@ -108,10 +111,11 @@ public class AppGridView extends GridView {
final PackageManager pm = mPackageManager;
final ArrayList<ActivityEntry> results = new ArrayList<>();
final List<ResolveInfo> infos = pm.queryIntentActivities(mainIntent, 0);
final IconDrawableFactory iconFactory = IconDrawableFactory.newInstance(getContext());
for (ResolveInfo info : infos) {
final CharSequence label = info.loadLabel(pm);
if (label != null) {
results.add(new ActivityEntry(info, label.toString()));
results.add(new ActivityEntry(info, label.toString(), iconFactory));
}
}
@@ -124,13 +128,19 @@ public class AppGridView extends GridView {
/**
* Class used for caching the activity label and icon.
*/
private static class ActivityEntry implements Comparable<ActivityEntry> {
@VisibleForTesting
public static class ActivityEntry implements Comparable<ActivityEntry> {
public final ResolveInfo info;
public final String label;
private final IconDrawableFactory mIconFactory;
private final int mUserId;
public ActivityEntry(ResolveInfo info, String label) {
public ActivityEntry(ResolveInfo info, String label, IconDrawableFactory iconFactory) {
this.info = info;
this.label = label;
mIconFactory = iconFactory;
mUserId = UserHandle.myUserId();
}
@Override
@@ -142,5 +152,10 @@ public class AppGridView extends GridView {
public String toString() {
return label;
}
public Drawable getIcon() {
return mIconFactory.getBadgedIcon(
info.activityInfo, info.activityInfo.applicationInfo, mUserId);
}
}
}