From 4a5bee3e84922ebbb70a2748f4a3daaee1a3ae02 Mon Sep 17 00:00:00 2001 From: Marcus Hoffmann Date: Mon, 24 Feb 2020 17:15:03 +0100 Subject: [PATCH] use icon from pm, when there's none from the metadata This was already done for list views because of the panic uninstall list but we can easily apply the same logic to the tile view and app detail view as well. --- .../main/java/org/fdroid/fdroid/Utils.java | 23 +++++++++++++++++++ .../views/AppDetailsRecyclerViewAdapter.java | 2 +- .../views/apps/AppListItemController.java | 13 +---------- .../views/categories/AppCardController.java | 3 +-- 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java index 12653ff42..431ae7a13 100644 --- a/app/src/main/java/org/fdroid/fdroid/Utils.java +++ b/app/src/main/java/org/fdroid/fdroid/Utils.java @@ -49,12 +49,15 @@ import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.ViewTreeObserver; +import android.widget.ImageView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; +import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import com.nostra13.universalimageloader.utils.StorageUtils; import org.fdroid.fdroid.compat.FileCompat; +import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.data.Repo; import org.fdroid.fdroid.data.SanitizedFile; import org.xml.sax.XMLReader; @@ -486,6 +489,26 @@ public final class Utils { return repoAppDisplayImageOptions; } + /** + * If app has an iconUrl we feed that to UIL, otherwise we ask the PackageManager which will + * return the app's icon directly when the app is installed. + * We fall back to the placeholder icon otherwise. + */ + public static void setIconFromRepoOrPM(@NonNull App app, ImageView iv, Context context) { + if (app.getIconUrl(iv.getContext()) == null) { + try { + iv.setImageDrawable(context.getPackageManager().getApplicationIcon(app.packageName)); + } catch (PackageManager.NameNotFoundException e) { + DisplayImageOptions options = Utils.getRepoAppDisplayImageOptions(); + iv.setImageDrawable(options.shouldShowImageForEmptyUri() + ? options.getImageForEmptyUri(FDroidApp.getInstance().getResources()) + : null); + } + } else { + ImageLoader.getInstance().displayImage(app.getIconUrl(iv.getContext()), iv, Utils.getRepoAppDisplayImageOptions()); + } + } + // this is all new stuff being added public static String hashBytes(byte[] input, String algo) { try { diff --git a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java index 6304b9574..e6287e50f 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java +++ b/app/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java @@ -480,7 +480,7 @@ public class AppDetailsRecyclerViewAdapter } public void bindModel() { - ImageLoader.getInstance().displayImage(app.getIconUrl(iconView.getContext()), iconView, Utils.getRepoAppDisplayImageOptions()); + Utils.setIconFromRepoOrPM(app, iconView, iconView.getContext()); titleView.setText(app.name); if (!TextUtils.isEmpty(app.authorName)) { authorView.setText(context.getString(R.string.by_author_format, app.authorName)); diff --git a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java index 93cb0717b..ac7b62a25 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java @@ -191,18 +191,7 @@ public abstract class AppListItemController extends RecyclerView.ViewHolder { if (actionButton != null) actionButton.setEnabled(true); - if (app.getIconUrl(icon.getContext()) == null) { - try { - icon.setImageDrawable(activity.getPackageManager().getApplicationIcon(app.packageName)); - } catch (PackageManager.NameNotFoundException e) { - DisplayImageOptions options = Utils.getRepoAppDisplayImageOptions(); - icon.setImageDrawable(options.shouldShowImageForEmptyUri() - ? options.getImageForEmptyUri(FDroidApp.getInstance().getResources()) - : null); - } - } else { - ImageLoader.getInstance().displayImage(app.getIconUrl(icon.getContext()), icon, Utils.getRepoAppDisplayImageOptions()); - } + Utils.setIconFromRepoOrPM(app, icon, activity); // Figures out the current install/update/download/etc status for the app we are viewing. // Then, asks the view to update itself to reflect this status. diff --git a/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java b/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java index bb0c3cc02..00639e6fd 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java +++ b/app/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java @@ -95,8 +95,7 @@ public class AppCardController extends RecyclerView.ViewHolder newTag.setVisibility(View.GONE); } } - - ImageLoader.getInstance().displayImage(app.getIconUrl(icon.getContext()), icon, Utils.getRepoAppDisplayImageOptions()); + Utils.setIconFromRepoOrPM(app, icon, icon.getContext()); } private boolean isConsideredNew(@NonNull App app) {