Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d7c7aa6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 6edd95a4 240372f9
Loading
Loading
Loading
Loading
+29 −25
Original line number Diff line number Diff line
@@ -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);