Merge "Fixes blank lock screen wallpaper after change wp from home to both" into udc-dev

This commit is contained in:
TreeHugger Robot
2023-04-28 01:47:21 +00:00
committed by Android (Google) Code Review

View File

@@ -1353,9 +1353,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
void complete() {
// Only changes from home+lock to just home or lock need attention
// If setting the wallpaper fails, this callback will be called
// when the wallpaper is detached, in which case wallpapers may have
// already changed. Make sure we're not overwriting a more recent wallpaper.
if (mNewWallpaper.mSystemWasBoth) {
if (DEBUG) {
Slog.v(TAG, "Handling change from system+lock wallpaper");
@@ -1378,7 +1375,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
mOriginalSystem.wallpaperComponent;
lockWp.connection = mOriginalSystem.connection;
lockWp.connection.mWallpaper = lockWp;
updateEngineFlags(mOriginalSystem, FLAG_LOCK);
mOriginalSystem.mWhich = FLAG_LOCK;
updateEngineFlags(mOriginalSystem);
notifyWallpaperColorsChanged(lockWp, FLAG_LOCK);
} else {
// Failed rename, use current system wp for both
@@ -1387,7 +1385,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
}
WallpaperData currentSystem = mWallpaperMap.get(mNewWallpaper.userId);
currentSystem.mWhich = FLAG_SYSTEM | FLAG_LOCK;
updateEngineFlags(currentSystem, FLAG_SYSTEM | FLAG_LOCK);
updateEngineFlags(currentSystem);
mLockWallpaperMap.remove(mNewWallpaper.userId);
}
} else {
@@ -1396,7 +1394,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
Slog.v(TAG, "live system+lock to system success");
}
mOriginalSystem.mWhich = FLAG_LOCK;
updateEngineFlags(mOriginalSystem, FLAG_LOCK);
updateEngineFlags(mOriginalSystem);
mLockWallpaperMap.put(mNewWallpaper.userId, mOriginalSystem);
mLastLockWallpaper = mOriginalSystem;
notifyWallpaperColorsChanged(mOriginalSystem, FLAG_LOCK);
@@ -1409,7 +1407,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
WallpaperData currentSystem = mWallpaperMap.get(mNewWallpaper.userId);
if (currentSystem.wallpaperId == mOriginalSystem.wallpaperId) {
currentSystem.mWhich = FLAG_SYSTEM;
updateEngineFlags(currentSystem, FLAG_SYSTEM);
updateEngineFlags(currentSystem);
}
}
}
@@ -1422,24 +1420,6 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
Slog.v(TAG, "new lastLockWp: " + mLastLockWallpaper);
}
}
private void updateEngineFlags(WallpaperData wallpaper, @SetWallpaperFlags int which) {
if (wallpaper.connection == null) {
return;
}
wallpaper.connection.forEachDisplayConnector(
connector -> {
try {
if (connector.mEngine != null) {
connector.mEngine.setWallpaperFlags(which);
mWindowManagerInternal.setWallpaperShowWhenLocked(
connector.mToken, (which & FLAG_LOCK) != 0);
}
} catch (RemoteException e) {
Slog.e(TAG, "Failed to update wallpaper engine flags", e);
}
});
}
}
class MyPackageMonitor extends PackageMonitor {
@@ -3095,6 +3075,9 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
newWallpaper.userId);
if (lockedWallpaper != null) {
detachWallpaperLocked(lockedWallpaper);
if (same) {
updateEngineFlags(newWallpaper);
}
}
mLockWallpaperMap.remove(newWallpaper.userId);
}
@@ -3430,6 +3413,27 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
}
}
// Updates the given wallpaper's Engine so that its destination flags are the same as those of
// the wallpaper, e.g., after a wallpaper has been changed from displaying on home+lock to home
// or lock only.
private void updateEngineFlags(WallpaperData wallpaper) {
if (wallpaper.connection == null) {
return;
}
wallpaper.connection.forEachDisplayConnector(
connector -> {
try {
if (connector.mEngine != null) {
connector.mEngine.setWallpaperFlags(wallpaper.mWhich);
mWindowManagerInternal.setWallpaperShowWhenLocked(
connector.mToken, (wallpaper.mWhich & FLAG_LOCK) != 0);
}
} catch (RemoteException e) {
Slog.e(TAG, "Failed to update wallpaper engine flags", e);
}
});
}
private void clearWallpaperComponentLocked(WallpaperData wallpaper) {
wallpaper.wallpaperComponent = null;
detachWallpaperLocked(wallpaper);