|
|
|
@ -58,30 +58,6 @@ class WallpaperManager(
|
|
|
|
|
fileManager.clean(currentWallpaper, wallpapers.filterIsInstance<Wallpaper.Remote>())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Apply the [newWallpaper] into the [wallpaperContainer] and update the [currentWallpaper].
|
|
|
|
|
*/
|
|
|
|
|
fun updateWallpaper(wallpaperContainer: ImageView, newWallpaper: Wallpaper) {
|
|
|
|
|
val context = wallpaperContainer.context
|
|
|
|
|
if (newWallpaper == defaultWallpaper) {
|
|
|
|
|
wallpaperContainer.visibility = View.GONE
|
|
|
|
|
logger.info("Wallpaper update to default background")
|
|
|
|
|
} else {
|
|
|
|
|
val bitmap = loadSavedWallpaper(context, newWallpaper)
|
|
|
|
|
if (bitmap == null) {
|
|
|
|
|
val message = "Could not load wallpaper bitmap. Resetting to default."
|
|
|
|
|
logger.error(message)
|
|
|
|
|
currentWallpaper = defaultWallpaper
|
|
|
|
|
wallpaperContainer.visibility = View.GONE
|
|
|
|
|
return
|
|
|
|
|
} else {
|
|
|
|
|
wallpaperContainer.visibility = View.VISIBLE
|
|
|
|
|
scaleBitmapToBottom(bitmap, wallpaperContainer)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
currentWallpaper = newWallpaper
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Download all known remote wallpapers.
|
|
|
|
|
*/
|
|
|
|
@ -104,7 +80,7 @@ class WallpaperManager(
|
|
|
|
|
} else {
|
|
|
|
|
values[index]
|
|
|
|
|
}.also {
|
|
|
|
|
appStore.dispatch(AppAction.WallpaperAction.UpdateCurrentWallpaper(it))
|
|
|
|
|
currentWallpaper = it
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -139,10 +115,10 @@ class WallpaperManager(
|
|
|
|
|
/**
|
|
|
|
|
* Load a wallpaper that is saved locally.
|
|
|
|
|
*/
|
|
|
|
|
fun loadSavedWallpaper(context: Context, wallpaper: Wallpaper): Bitmap? =
|
|
|
|
|
when (wallpaper) {
|
|
|
|
|
is Wallpaper.Local -> loadWallpaperFromDrawables(context, wallpaper)
|
|
|
|
|
is Wallpaper.Remote -> loadWallpaperFromDisk(context, wallpaper)
|
|
|
|
|
fun Wallpaper.load(context: Context): Bitmap? =
|
|
|
|
|
when (this) {
|
|
|
|
|
is Wallpaper.Local -> loadWallpaperFromDrawables(context, this)
|
|
|
|
|
is Wallpaper.Remote -> loadWallpaperFromDisk(context, this)
|
|
|
|
|
else -> null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -163,7 +139,14 @@ class WallpaperManager(
|
|
|
|
|
}
|
|
|
|
|
}.getOrNull()
|
|
|
|
|
|
|
|
|
|
private fun scaleBitmapToBottom(bitmap: Bitmap, view: ImageView) {
|
|
|
|
|
/**
|
|
|
|
|
* This will scale the received [Bitmap] to the size of the [view]. It retains the bitmap's
|
|
|
|
|
* original aspect ratio, but will shrink or enlarge it to fit the viewport. If bitmap does not
|
|
|
|
|
* correctly fit the aspect ratio of the view, it will be shifted to prioritize the bottom-left
|
|
|
|
|
* of the bitmap.
|
|
|
|
|
*/
|
|
|
|
|
fun Bitmap.scaleBitmapToBottomOfView(view: ImageView) {
|
|
|
|
|
val bitmap = this
|
|
|
|
|
view.setImageBitmap(bitmap)
|
|
|
|
|
view.scaleType = ImageView.ScaleType.MATRIX
|
|
|
|
|
val matrix = Matrix()
|
|
|
|
|