From d9355afe6001683493aab20359063b8e065bcb7b Mon Sep 17 00:00:00 2001 From: sarsamurmu Date: Mon, 12 Aug 2019 14:05:56 +0530 Subject: [PATCH] Now Gets Highest Quality Icon --- .../lib/fragments/SettingsFragment.java | 6 ++--- .../candybar/lib/helpers/DrawableHelper.java | 24 +++++++++++++++---- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/candybar/lib/fragments/SettingsFragment.java b/library/src/main/java/candybar/lib/fragments/SettingsFragment.java index 365139281..9a7de5bb4 100644 --- a/library/src/main/java/candybar/lib/fragments/SettingsFragment.java +++ b/library/src/main/java/candybar/lib/fragments/SettingsFragment.java @@ -30,7 +30,6 @@ import candybar.lib.applications.CandyBarApplication; import candybar.lib.databases.Database; import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.DrawableHelper; import candybar.lib.helpers.IconsHelper; import candybar.lib.helpers.LocaleHelper; import candybar.lib.helpers.RequestHelper; @@ -41,6 +40,8 @@ import candybar.lib.items.Setting; import candybar.lib.preferences.Preferences; +import static candybar.lib.helpers.DrawableHelper.getReqIcon; + /* * CandyBar - Material Dashboard * @@ -248,8 +249,7 @@ protected Boolean doInBackground(Void... voids) { List files = new ArrayList<>(); for (int i = 0; i < requests.size(); i++) { - Drawable drawable = DrawableHelper.getHighQualityIcon( - getActivity(), requests.get(i).getPackageName()); + Drawable drawable = getReqIcon(getActivity(), requests.get(i).getPackageName()); String icon = IconsHelper.saveIcon(files, directory, drawable, requests.get(i).getName()); if (icon != null) files.add(icon); } diff --git a/library/src/main/java/candybar/lib/helpers/DrawableHelper.java b/library/src/main/java/candybar/lib/helpers/DrawableHelper.java index aafa69bbc..fe2052d32 100644 --- a/library/src/main/java/candybar/lib/helpers/DrawableHelper.java +++ b/library/src/main/java/candybar/lib/helpers/DrawableHelper.java @@ -55,8 +55,22 @@ public static Drawable getAppIcon(@NonNull Context context, ResolveInfo info) { public static Drawable getReqIcon(@NonNull Context context, String packageName) { try { PackageManager packageManager = context.getPackageManager(); - Drawable drawable = packageManager.getApplicationIcon(packageName); - return drawable; + + Drawable normalDrawable = packageManager.getApplicationIcon(packageName); + + ApplicationInfo info = packageManager.getApplicationInfo( + packageName, PackageManager.GET_META_DATA); + + Resources resources = packageManager.getResourcesForApplication(packageName); + int density = DisplayMetrics.DENSITY_XXHIGH; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + density = DisplayMetrics.DENSITY_XXXHIGH; + } + Drawable drawable = ResourcesCompat.getDrawableForDensity( + resources, info.icon, density, null); + + if (drawable != null) return drawable; + return normalDrawable; } catch (Exception | OutOfMemoryError e) { LogUtil.e(Log.getStackTraceString(e)); } @@ -65,18 +79,18 @@ public static Drawable getReqIcon(@NonNull Context context, String packageName) public static Bitmap getRightIcon(Drawable drawable) { if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - Log.d("CandyBarIconGeneration", "Made Normal Icon in Low SDK"); + Log.d("CandyBar", "Made Normal Icon in Low SDK"); return ((BitmapDrawable) drawable).getBitmap(); } else { if (drawable instanceof BitmapDrawable) { - Log.d("CandyBarIconGeneration", "Made Normal Icon in High SDK"); + Log.d("CandyBar", "Made Normal Icon in High SDK"); return ((BitmapDrawable) drawable).getBitmap(); } else if (drawable instanceof AdaptiveIconDrawable) { AdaptiveIconDrawable adaptiveID = ((AdaptiveIconDrawable) drawable); AdaptiveIcon adaptiveIcon = new AdaptiveIcon(); adaptiveIcon.setDrawables(adaptiveID.getForeground(), adaptiveID.getBackground()); Bitmap iconBitmap = adaptiveIcon.render(); - Log.d("CandyBarIconGeneration", "Made Adaptive Icon in High SDK"); + Log.d("CandyBar", "Made Adaptive Icon in High SDK"); return iconBitmap; } }