From 7a5705b3c2106dd1fa2c0484c8a9ff6a92509f1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Pomini?= Date: Wed, 28 Jun 2023 14:34:14 +0000 Subject: [PATCH] Don't set ImageWallpaper to home only the first time CL only effective if lockscreen live wallpaper are not enabled. The first time, setting a wallpaper on home only will trigger a migration of the default wallpaper, which causes some problems when the lockscreen live wallpaper flag is not enabled. In that case, force the wallpaper to be set on home + lock, to make sure the lock screen doesn't end up without any wallpaper. Bug: b/279129369 Test: manually check that the bug is fixed Test: atest WallpaperManagerTest Change-Id: Id955a8336455b47a8ba30958f25f2fd276fee013 Merged-In: Id955a8336455b47a8ba30958f25f2fd276fee013 --- .../wallpaper/WallpaperManagerService.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index e31b53cf4a29d..cd3d603d831a0 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -3050,7 +3050,10 @@ public class WallpaperManagerService extends IWallpaperManager.Stub if (which == FLAG_SYSTEM && systemIsStatic && systemIsBoth) { Slog.i(TAG, "Migrating current wallpaper to be lock-only before" + " updating system wallpaper"); - migrateStaticSystemToLockWallpaperLocked(userId); + if (!migrateStaticSystemToLockWallpaperLocked(userId) + && !isLockscreenLiveWallpaperEnabled()) { + which |= FLAG_LOCK; + } } wallpaper = getWallpaperSafeLocked(userId, which); @@ -3078,13 +3081,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub } } - private void migrateStaticSystemToLockWallpaperLocked(int userId) { + private boolean migrateStaticSystemToLockWallpaperLocked(int userId) { WallpaperData sysWP = mWallpaperMap.get(userId); if (sysWP == null) { if (DEBUG) { Slog.i(TAG, "No system wallpaper? Not tracking for lock-only"); } - return; + return true; } // We know a-priori that there is no lock-only wallpaper currently @@ -3105,11 +3108,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub SELinux.restorecon(lockWP.wallpaperFile); mLastLockWallpaper = lockWP; } + return true; } catch (ErrnoException e) { - Slog.e(TAG, "Can't migrate system wallpaper: " + e.getMessage()); + // can happen when migrating default wallpaper (which is not stored in wallpaperFile) + Slog.w(TAG, "Couldn't migrate system wallpaper: " + e.getMessage()); lockWP.wallpaperFile.delete(); lockWP.cropFile.delete(); - return; + return false; } } @@ -3310,7 +3315,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub // therefore it's a shared system+lock image that we need to migrate. Slog.i(TAG, "Migrating current wallpaper to be lock-only before" + "updating system wallpaper"); - migrateStaticSystemToLockWallpaperLocked(userId); + if (!migrateStaticSystemToLockWallpaperLocked(userId)) { + which |= FLAG_LOCK; + } } }