DivestOS/Patches/LineageOS-16.0/android_packages_apps_Backgrounds/308977.patch

102 lines
4.3 KiB
Diff

From 32ebb8bb7abd2fc6031a68d9eec70d83e218b79d Mon Sep 17 00:00:00 2001
From: DJAB HipHop <mweb71@yahoo.com>
Date: Wed, 26 May 2021 20:19:17 +0200
Subject: [PATCH] Backgrounds: Optimize builtin wallpaper loading code
Test in 16.0 by adding extra 4k paper wallpaper I took with my iPhone 11 pro max & opening the app
Change-Id: Ic3901bda473aaa9872baeb8a89958eb1339113fa
Signed-off-by: DJAB HipHop <mweb71@yahoo.com>
---
.../factory/BuiltInWallpaperFactory.java | 7 +++-
.../lineageos/backgrounds/util/UiUtils.java | 40 +++++++++++++++++++
2 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/lineageos/backgrounds/factory/BuiltInWallpaperFactory.java b/app/src/main/java/org/lineageos/backgrounds/factory/BuiltInWallpaperFactory.java
index 7508d3c..264fa6b 100644
--- a/app/src/main/java/org/lineageos/backgrounds/factory/BuiltInWallpaperFactory.java
+++ b/app/src/main/java/org/lineageos/backgrounds/factory/BuiltInWallpaperFactory.java
@@ -18,6 +18,7 @@
import android.app.WallpaperManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
+import android.graphics.drawable.BitmapDrawable;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -25,6 +26,7 @@
import org.lineageos.backgrounds.R;
import org.lineageos.backgrounds.bundle.WallpaperBundle;
import org.lineageos.backgrounds.bundle.WallpaperType;
+import org.lineageos.backgrounds.util.UiUtils;
public final class BuiltInWallpaperFactory {
@@ -33,8 +35,9 @@ private BuiltInWallpaperFactory() {
public static WallpaperBundle build(@NonNull final String name,
@NonNull final Resources res,
- @DrawableRes final int drawableRes) {
- Drawable drawable = res.getDrawable(drawableRes, res.newTheme());
+ @DrawableRes final int drawableRes) {
+ Drawable drawable = new BitmapDrawable(res, UiUtils.decodeSampledBitmapFromResource(res, drawableRes, 250, 500));
+
return new WallpaperBundle(name, drawable, drawableRes, WallpaperType.BUILT_IN);
}
diff --git a/app/src/main/java/org/lineageos/backgrounds/util/UiUtils.java b/app/src/main/java/org/lineageos/backgrounds/util/UiUtils.java
index 2d5b798..b0de83b 100644
--- a/app/src/main/java/org/lineageos/backgrounds/util/UiUtils.java
+++ b/app/src/main/java/org/lineageos/backgrounds/util/UiUtils.java
@@ -17,6 +17,9 @@
import android.view.View;
import android.view.Window;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
@@ -38,4 +41,41 @@ public static void setStatusBarColor(@NonNull final Window window, @ColorInt fin
window.getDecorView().setSystemUiVisibility(flags);
}
+
+ public static int calculateInSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) {
+ // Raw height and width of image
+ final int height = options.outHeight;
+ final int width = options.outWidth;
+ int inSampleSize = 1;
+
+ if (height > reqHeight || width > reqWidth) {
+
+ final int halfHeight = height / 2;
+ final int halfWidth = width / 2;
+
+ // Calculate the largest inSampleSize value that is a power of 2 and keeps both
+ // height and width larger than the requested height and width.
+ while ((halfHeight / inSampleSize) >= reqHeight
+ && (halfWidth / inSampleSize) >= reqWidth) {
+ inSampleSize *= 2;
+ }
+ }
+
+ return inSampleSize;
+ }
+
+ public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, int reqWidth, int reqHeight) {
+
+ // First decode with inJustDecodeBounds=true to check dimensions
+ final BitmapFactory.Options options = new BitmapFactory.Options();
+ options.inJustDecodeBounds = true;
+ BitmapFactory.decodeResource(res, resId, options);
+
+ // Calculate inSampleSize
+ options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
+
+ // Decode bitmap with inSampleSize set
+ options.inJustDecodeBounds = false;
+ return BitmapFactory.decodeResource(res, resId, options);
+ }
}