diff options
| author | 2022-12-08 21:48:41 +0000 | |
|---|---|---|
| committer | 2022-12-08 21:48:41 +0000 | |
| commit | cd6397be02bb9155a295da5e498858c9121ded7e (patch) | |
| tree | e1d99be189bd30a964e208fc44d43c2f6aea5f81 /java | |
| parent | 12becfbc745f2bd9ab065c03ac6f4b5cf6267de8 (diff) | |
| parent | 44c34326ef042d849a23939d3198bc7fe354cea3 (diff) | |
Merge "Load app icons defensively" into tm-qpr-dev
Diffstat (limited to 'java')
| -rw-r--r-- | java/src/com/android/intentresolver/ChooserListAdapter.java | 23 | ||||
| -rw-r--r-- | java/src/com/android/intentresolver/ResolverListAdapter.java | 27 |
2 files changed, 38 insertions, 12 deletions
diff --git a/java/src/com/android/intentresolver/ChooserListAdapter.java b/java/src/com/android/intentresolver/ChooserListAdapter.java index 6d59a680..e968f71d 100644 --- a/java/src/com/android/intentresolver/ChooserListAdapter.java +++ b/java/src/com/android/intentresolver/ChooserListAdapter.java @@ -259,8 +259,7 @@ public class ChooserListAdapter extends ResolverListAdapter { final ViewHolder holder = (ViewHolder) view.getTag(); if (info == null) { - holder.icon.setImageDrawable( - mContext.getDrawable(R.drawable.resolver_icon_placeholder)); + holder.icon.setImageDrawable(loadIconPlaceholder()); return; } @@ -657,11 +656,21 @@ public class ChooserListAdapter extends ResolverListAdapter { @Override protected Drawable doInBackground(Void... voids) { - return getChooserTargetIconDrawable( - mContext, - mTargetInfo.getChooserTargetIcon(), - mTargetInfo.getChooserTargetComponentName(), - mTargetInfo.getDirectShareShortcutInfo()); + Drawable drawable; + try { + drawable = getChooserTargetIconDrawable( + mContext, + mTargetInfo.getChooserTargetIcon(), + mTargetInfo.getChooserTargetComponentName(), + mTargetInfo.getDirectShareShortcutInfo()); + } catch (Exception e) { + Log.e(TAG, + "Failed to load shortcut icon for " + + mTargetInfo.getChooserTargetComponentName(), + e); + drawable = loadIconPlaceholder(); + } + return drawable; } @Override diff --git a/java/src/com/android/intentresolver/ResolverListAdapter.java b/java/src/com/android/intentresolver/ResolverListAdapter.java index 46e39fe6..5513eda2 100644 --- a/java/src/com/android/intentresolver/ResolverListAdapter.java +++ b/java/src/com/android/intentresolver/ResolverListAdapter.java @@ -677,8 +677,7 @@ public class ResolverListAdapter extends BaseAdapter { protected void onBindView(View view, TargetInfo info, int position) { final ViewHolder holder = (ViewHolder) view.getTag(); if (info == null) { - holder.icon.setImageDrawable( - mContext.getDrawable(R.drawable.resolver_icon_placeholder)); + holder.icon.setImageDrawable(loadIconPlaceholder()); holder.bindLabel("", "", false); return; } @@ -704,7 +703,7 @@ public class ResolverListAdapter extends BaseAdapter { protected final void loadIcon(DisplayResolveInfo info) { LoadIconTask task = mIconLoaders.get(info); if (task == null) { - task = new LoadIconTask((DisplayResolveInfo) info); + task = new LoadIconTask(info); mIconLoaders.put(info, task); task.execute(); } @@ -779,13 +778,25 @@ public class ResolverListAdapter extends BaseAdapter { return makePresentationGetter(ri).getIcon(getUserHandle()); } + protected final Drawable loadIconPlaceholder() { + return mContext.getDrawable(R.drawable.resolver_icon_placeholder); + } + void loadFilteredItemIconTaskAsync(@NonNull ImageView iconView) { final DisplayResolveInfo iconInfo = getFilteredItem(); if (iconView != null && iconInfo != null) { new AsyncTask<Void, Void, Drawable>() { @Override protected Drawable doInBackground(Void... params) { - return loadIconForResolveInfo(iconInfo.getResolveInfo()); + Drawable drawable; + try { + drawable = loadIconForResolveInfo(iconInfo.getResolveInfo()); + } catch (Exception e) { + ComponentName componentName = iconInfo.getResolvedComponentName(); + Log.e(TAG, "Failed to load app icon for " + componentName, e); + drawable = loadIconPlaceholder(); + } + return drawable; } @Override @@ -1021,7 +1032,13 @@ public class ResolverListAdapter extends BaseAdapter { @Override protected Drawable doInBackground(Void... params) { - return loadIconForResolveInfo(mResolveInfo); + try { + return loadIconForResolveInfo(mResolveInfo); + } catch (Exception e) { + ComponentName componentName = mDisplayResolveInfo.getResolvedComponentName(); + Log.e(TAG, "Failed to load app icon for " + componentName, e); + return loadIconPlaceholder(); + } } @Override |