Skip to content

Commit e639a59

Browse files
committed
Scale wallpaper preview down
1 parent 059286c commit e639a59

File tree

2 files changed

+40
-1
lines changed

2 files changed

+40
-1
lines changed

lawnchair/src/app/lawnchair/ui/preferences/components/WallpaperPreview.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package app.lawnchair.ui.preferences.components
22

33
import android.annotation.SuppressLint
44
import android.app.WallpaperManager
5+
import android.graphics.drawable.BitmapDrawable
56
import android.graphics.drawable.Drawable
67
import androidx.compose.foundation.Image
78
import androidx.compose.runtime.Composable
@@ -10,6 +11,8 @@ import androidx.compose.runtime.remember
1011
import androidx.compose.ui.Modifier
1112
import androidx.compose.ui.layout.ContentScale
1213
import androidx.compose.ui.platform.LocalContext
14+
import androidx.core.graphics.drawable.toBitmap
15+
import app.lawnchair.util.scaleDownToDisplaySize
1316
import com.google.accompanist.drawablepainter.rememberDrawablePainter
1417
import com.google.accompanist.permissions.*
1518

@@ -35,7 +38,12 @@ fun wallpaperDrawable(): Drawable? {
3538

3639
return when {
3740
wallpaperInfo != null -> remember { wallpaperInfo.loadThumbnail(context.packageManager) }
38-
permissionState.status.isGranted -> remember { wallpaperManager.drawable }
41+
permissionState.status.isGranted -> remember {
42+
wallpaperManager.drawable?.let {
43+
val bitmap = it.toBitmap().scaleDownToDisplaySize(context)
44+
BitmapDrawable(context.resources, bitmap)
45+
}
46+
}
3947
permissionState.status.isGranted.not() -> {
4048
SideEffect { permissionState.launchPermissionRequest() }
4149
null

lawnchair/src/app/lawnchair/util/LawnchairUtils.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ import android.content.Intent
2626
import android.content.pm.PackageInfo.REQUESTED_PERMISSION_GRANTED
2727
import android.content.pm.PackageManager
2828
import android.content.res.Resources
29+
import android.graphics.Bitmap
30+
import android.graphics.Matrix
2931
import android.net.Uri
3032
import android.os.Looper
3133
import android.provider.OpenableColumns
@@ -185,3 +187,32 @@ fun ContentResolver.getDisplayName(uri: Uri): String? {
185187
}
186188
return null
187189
}
190+
191+
fun Bitmap.scaleDownToDisplaySize(context: Context, keepOriginal: Boolean = false): Bitmap {
192+
val metrics = context.resources.displayMetrics
193+
return scaleDownTo(kotlin.math.max(metrics.widthPixels, metrics.heightPixels), keepOriginal)
194+
}
195+
196+
fun Bitmap.scaleDownTo(maxSize: Int, keepOriginal: Boolean = false): Bitmap {
197+
val width = width
198+
val height = height
199+
val newWidth: Int
200+
val newHeight: Int
201+
202+
when {
203+
width > height && width > maxSize -> {
204+
newWidth = maxSize
205+
newHeight = (height * newWidth.toFloat() / width).toInt()
206+
}
207+
height > maxSize -> {
208+
newHeight = maxSize
209+
newWidth = (width * newHeight.toFloat() / height).toInt()
210+
}
211+
else -> return this
212+
}
213+
val newBitmap = Bitmap.createScaledBitmap(this, newWidth, newHeight, true)
214+
if (!keepOriginal) {
215+
recycle()
216+
}
217+
return newBitmap
218+
}

0 commit comments

Comments
 (0)