mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-21 05:44:30 -05:00
102 lines
4.3 KiB
Diff
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);
|
|
+ }
|
|
}
|