From c063c59af320e15204584ede3611478d880cc407 Mon Sep 17 00:00:00 2001 From: flofriday Date: Sat, 27 Apr 2024 11:28:30 +0200 Subject: [PATCH] Fix sharp corners on placeholders (#7142) All placeholder now have round corners matching the corner radius of the image that will eventually load. --- .../ui/screen/drawer/NavListAdapter.java | 8 +++++--- .../ui/screen/episode/ItemFragment.java | 6 ++++-- .../ui/common/ImagePlaceholder.java | 19 +++++++++++++++++++ .../ui/discovery/FeedDiscoverAdapter.java | 7 ++++--- .../ui/discovery/OnlineSearchAdapter.java | 7 ++++--- .../screen/about/SimpleIconListAdapter.java | 6 ++++-- 6 files changed, 40 insertions(+), 13 deletions(-) create mode 100644 ui/common/src/main/java/de/danoeh/antennapod/ui/common/ImagePlaceholder.java diff --git a/app/src/main/java/de/danoeh/antennapod/ui/screen/drawer/NavListAdapter.java b/app/src/main/java/de/danoeh/antennapod/ui/screen/drawer/NavListAdapter.java index aaf8724606..601a3954a9 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/screen/drawer/NavListAdapter.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/screen/drawer/NavListAdapter.java @@ -24,6 +24,7 @@ import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.R; +import de.danoeh.antennapod.ui.common.ImagePlaceholder; import de.danoeh.antennapod.ui.screen.preferences.PreferenceActivity; import de.danoeh.antennapod.ui.screen.AllEpisodesFragment; import de.danoeh.antennapod.ui.screen.download.CompletedDownloadsFragment; @@ -314,13 +315,14 @@ private void bindFeedView(NavDrawerData.FeedDrawerItem drawerItem, FeedHolder ho return; } + float radius = 4 * context.getResources().getDisplayMetrics().density; Glide.with(context) .load(feed.getImageUrl()) .apply(new RequestOptions() - .placeholder(R.color.light_gray) - .error(R.color.light_gray) + .placeholder(ImagePlaceholder.getDrawable(context, radius)) + .error(ImagePlaceholder.getDrawable(context, radius)) .transform(new FitCenter(), - new RoundedCorners((int) (4 * context.getResources().getDisplayMetrics().density))) + new RoundedCorners((int) radius)) .dontAnimate()) .into(holder.image); diff --git a/app/src/main/java/de/danoeh/antennapod/ui/screen/episode/ItemFragment.java b/app/src/main/java/de/danoeh/antennapod/ui/screen/episode/ItemFragment.java index b3a5cbbf09..e31004a57f 100644 --- a/app/src/main/java/de/danoeh/antennapod/ui/screen/episode/ItemFragment.java +++ b/app/src/main/java/de/danoeh/antennapod/ui/screen/episode/ItemFragment.java @@ -52,6 +52,7 @@ import de.danoeh.antennapod.ui.common.Converter; import de.danoeh.antennapod.ui.common.DateFormatter; import de.danoeh.antennapod.ui.common.CircularProgressBar; +import de.danoeh.antennapod.ui.common.ImagePlaceholder; import de.danoeh.antennapod.ui.common.ThemeUtils; import de.danoeh.antennapod.ui.cleaner.ShownotesCleaner; import de.danoeh.antennapod.ui.episodes.ImageResourceUtils; @@ -286,10 +287,11 @@ private void updateAppearance() { txtvPublished.setContentDescription(DateFormatter.formatForAccessibility(item.getPubDate())); } + float radius = 8 * getResources().getDisplayMetrics().density; RequestOptions options = new RequestOptions() - .error(R.color.light_gray) + .error(ImagePlaceholder.getDrawable(getContext(), radius)) .transform(new FitCenter(), - new RoundedCorners((int) (8 * getResources().getDisplayMetrics().density))) + new RoundedCorners((int) radius)) .dontAnimate(); Glide.with(this) diff --git a/ui/common/src/main/java/de/danoeh/antennapod/ui/common/ImagePlaceholder.java b/ui/common/src/main/java/de/danoeh/antennapod/ui/common/ImagePlaceholder.java new file mode 100644 index 0000000000..b42bc6d173 --- /dev/null +++ b/ui/common/src/main/java/de/danoeh/antennapod/ui/common/ImagePlaceholder.java @@ -0,0 +1,19 @@ +package de.danoeh.antennapod.ui.common; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.GradientDrawable; + +import androidx.core.content.ContextCompat; + + +public class ImagePlaceholder { + public static Drawable getDrawable(Context context, float cornerRadius) { + GradientDrawable drawable = new GradientDrawable(); + drawable.setShape(GradientDrawable.RECTANGLE); + int color = ContextCompat.getColor(context, R.color.light_gray); + drawable.setColor(color); + drawable.setCornerRadius(cornerRadius); + return drawable; + } +} diff --git a/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/FeedDiscoverAdapter.java b/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/FeedDiscoverAdapter.java index ac400da9f0..71b498b208 100644 --- a/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/FeedDiscoverAdapter.java +++ b/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/FeedDiscoverAdapter.java @@ -10,6 +10,7 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; import de.danoeh.antennapod.net.discovery.PodcastSearchResult; +import de.danoeh.antennapod.ui.common.ImagePlaceholder; import java.util.ArrayList; import java.util.List; @@ -61,12 +62,12 @@ public View getView(int position, View convertView, ViewGroup parent) { final PodcastSearchResult podcast = getItem(position); holder.imageView.setContentDescription(podcast.title); + float radius = 8 * context.getResources().getDisplayMetrics().density; Glide.with(context) .load(podcast.imageUrl) .apply(new RequestOptions() - .placeholder(R.color.light_gray) - .transform(new FitCenter(), new RoundedCorners((int) - (8 * context.getResources().getDisplayMetrics().density))) + .placeholder(ImagePlaceholder.getDrawable(context, radius)) + .transform(new FitCenter(), new RoundedCorners((int) radius)) .dontAnimate()) .into(holder.imageView); diff --git a/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/OnlineSearchAdapter.java b/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/OnlineSearchAdapter.java index a536b8ebdd..36335f8286 100644 --- a/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/OnlineSearchAdapter.java +++ b/ui/discovery/src/main/java/de/danoeh/antennapod/ui/discovery/OnlineSearchAdapter.java @@ -18,6 +18,7 @@ import java.util.List; import de.danoeh.antennapod.net.discovery.PodcastSearchResult; +import de.danoeh.antennapod.ui.common.ImagePlaceholder; public class OnlineSearchAdapter extends ArrayAdapter { /** @@ -76,14 +77,14 @@ public View getView(int position, View convertView, @NonNull ViewGroup parent) { viewHolder.authorView.setVisibility(View.GONE); } - //Update the empty imageView with the image from the feed + float radius = 4 * context.getResources().getDisplayMetrics().density; Glide.with(context) .load(podcast.imageUrl) .apply(new RequestOptions() - .placeholder(R.color.light_gray) + .placeholder(ImagePlaceholder.getDrawable(context, radius)) .diskCacheStrategy(DiskCacheStrategy.NONE) .transform(new FitCenter(), - new RoundedCorners((int) (4 * context.getResources().getDisplayMetrics().density))) + new RoundedCorners((int) radius)) .dontAnimate()) .into(viewHolder.coverView); diff --git a/ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/about/SimpleIconListAdapter.java b/ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/about/SimpleIconListAdapter.java index 450f84f78a..97c6691437 100644 --- a/ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/about/SimpleIconListAdapter.java +++ b/ui/preferences/src/main/java/de/danoeh/antennapod/ui/preferences/screen/about/SimpleIconListAdapter.java @@ -13,6 +13,7 @@ import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.request.RequestOptions; +import de.danoeh.antennapod.ui.common.ImagePlaceholder; import de.danoeh.antennapod.ui.preferences.R; import java.util.List; @@ -43,12 +44,13 @@ public View getView(int position, View view, ViewGroup parent) { if (item.imageUrl == null) { view.findViewById(R.id.icon).setVisibility(View.GONE); } else { + float radius = 4 * context.getResources().getDisplayMetrics().density; Glide.with(context) .load(item.imageUrl) .apply(new RequestOptions() + .placeholder(ImagePlaceholder.getDrawable(context, radius)) .diskCacheStrategy(DiskCacheStrategy.NONE) - .transform(new FitCenter(), new RoundedCorners((int) - (4 * context.getResources().getDisplayMetrics().density))) + .transform(new FitCenter(), new RoundedCorners((int) radius)) .dontAnimate()) .into(((ImageView) view.findViewById(R.id.icon))); }