summaryrefslogtreecommitdiff
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/src/com/android/intentresolver/ChooserListAdapter.java23
-rw-r--r--java/src/com/android/intentresolver/ResolverListAdapter.java27
-rw-r--r--java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java13
3 files changed, 47 insertions, 16 deletions
diff --git a/java/src/com/android/intentresolver/ChooserListAdapter.java b/java/src/com/android/intentresolver/ChooserListAdapter.java
index 91a701a6..12a054b9 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
diff --git a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
index 28b68530..ff166fb7 100644
--- a/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
+++ b/java/tests/src/com/android/intentresolver/UnbundledChooserActivityTest.java
@@ -46,6 +46,7 @@ import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -775,7 +776,7 @@ public class UnbundledChooserActivityTest {
}
@Test
- public void copyTextToClipboardLogging() throws Exception {
+ public void copyTextToClipboardLogging() {
Intent sendIntent = createSendTextIntent();
List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2);
@@ -797,12 +798,16 @@ public class UnbundledChooserActivityTest {
verify(mockLogger, atLeastOnce()).write(logMakerCaptor.capture());
// The last captured event is the selection of the target.
- assertThat(logMakerCaptor.getValue().getCategory(),
- is(MetricsEvent.ACTION_ACTIVITY_CHOOSER_PICKED_SYSTEM_TARGET));
+ boolean containsTargetEvent = logMakerCaptor.getAllValues()
+ .stream()
+ .anyMatch(item ->
+ item.getCategory()
+ == MetricsEvent.ACTION_ACTIVITY_CHOOSER_PICKED_SYSTEM_TARGET);
+ assertTrue(
+ "ACTION_ACTIVITY_CHOOSER_PICKED_SYSTEM_TARGET is expected", containsTargetEvent);
assertThat(logMakerCaptor.getValue().getSubtype(), is(1));
}
-
@Test
@Ignore
public void testNearbyShareLogging() throws Exception {