Loading services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +5 −2 Original line number Diff line number Diff line Loading @@ -923,6 +923,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub if (DEBUG) Slog.v(TAG, "Adding window token: " + mToken); mWindowManagerInternal.addWindowToken(mToken, TYPE_WALLPAPER, mDisplayId, null /* options */); mWindowManagerInternal.setWallpaperShowWhenLocked( mToken, (wallpaper.mWhich & FLAG_LOCK) != 0); final DisplayData wpdData = mWallpaperDisplayHelper.getDisplayDataOrCreate(mDisplayId); try { Loading Loading @@ -1415,12 +1417,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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); } } ); }); } } Loading services/core/java/com/android/server/wm/WallpaperController.java +29 −9 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.H.WALLPAPER_DRAW_PENDING_TIMEOUT; import android.annotation.Nullable; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; Loading @@ -55,6 +56,7 @@ import android.view.WindowManager; import android.view.animation.Animation; import android.window.ScreenCapture; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLogImpl; import com.android.internal.protolog.common.ProtoLog; Loading @@ -72,7 +74,7 @@ import java.util.function.Consumer; class WallpaperController { private static final String TAG = TAG_WITH_CLASS_NAME ? "WallpaperController" : TAG_WM; private WindowManagerService mService; private final DisplayContent mDisplayContent; private DisplayContent mDisplayContent; private final ArrayList<WallpaperWindowToken> mWallpaperTokens = new ArrayList<>(); Loading Loading @@ -120,9 +122,19 @@ class WallpaperController { private boolean mShouldOffsetWallpaperCenter; final boolean mEnableSeparateLockScreenEngine; private final ToBooleanFunction<WindowState> mFindWallpaperTargetFunction = w -> { if ((w.mAttrs.type == TYPE_WALLPAPER)) { if (mFindResults.topWallpaper == null || mFindResults.resetTopWallpaper) { WallpaperWindowToken token = w.mToken.asWallpaperToken(); if (token == null) { Slog.w(TAG, "Window " + w + " has wallpaper type but not wallpaper token"); return false; } if (!token.canShowWhenLocked() && mDisplayContent.isKeyguardLocked()) { return false; } mFindResults.setTopWallpaper(w); mFindResults.resetTopWallpaper = false; } Loading Loading @@ -249,11 +261,14 @@ class WallpaperController { WallpaperController(WindowManagerService service, DisplayContent displayContent) { mService = service; mDisplayContent = displayContent; mMaxWallpaperScale = service.mContext.getResources() .getFloat(com.android.internal.R.dimen.config_wallpaperMaxScale); mShouldOffsetWallpaperCenter = service.mContext.getResources() .getBoolean( Resources resources = service.mContext.getResources(); mMaxWallpaperScale = resources.getFloat(com.android.internal.R.dimen.config_wallpaperMaxScale); mShouldOffsetWallpaperCenter = resources.getBoolean( com.android.internal.R.bool.config_offsetWallpaperToCenterOfLargestDisplay); mEnableSeparateLockScreenEngine = resources.getBoolean(R.bool.config_independentLockscreenLiveWallpaper); } void resetLargestDisplay(Display display) { Loading Loading @@ -753,10 +768,10 @@ class WallpaperController { result.setWallpaperTarget(wallpaperTarget); } private void updateWallpaperTokens(boolean visible) { private void updateWallpaperTokens(boolean visibility, boolean locked) { for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { final WallpaperWindowToken token = mWallpaperTokens.get(curTokenNdx); token.updateWallpaperWindows(visible); token.updateWallpaperWindows(visibility && (!locked || token.canShowWhenLocked())); } } Loading Loading @@ -794,7 +809,13 @@ class WallpaperController { } } updateWallpaperTokens(visible); // Keep both wallpapers visible unless the keyguard is locked (then hide private wp) updateWallpaperTokens(visible, mDisplayContent.isKeyguardLocked()); if (DEBUG_WALLPAPER) { Slog.v(TAG, "adjustWallpaperWindows: wallpaper visibility " + visible + ", lock visibility " + mDisplayContent.isKeyguardLocked()); } if (visible && mLastFrozen != mFindResults.isWallpaperTargetForLetterbox) { mLastFrozen = mFindResults.isWallpaperTargetForLetterbox; Loading Loading @@ -896,7 +917,6 @@ class WallpaperController { mWallpaperTokens.remove(token); } @VisibleForTesting boolean canScreenshotWallpaper() { return canScreenshotWallpaper(getTopVisibleWallpaper()); Loading services/core/java/com/android/server/wm/WallpaperWindowToken.java +12 −8 Original line number Diff line number Diff line Loading @@ -76,15 +76,19 @@ class WallpaperWindowToken extends WindowToken { return; } mShowWhenLocked = showWhenLocked; // Move the window token to the front (private) or back (showWhenLocked). This is possible // because the DisplayArea underneath TaskDisplayArea only contains TYPE_WALLPAPER windows. if (mDisplayContent.mWallpaperController.mEnableSeparateLockScreenEngine) { // Move the window token to the front (private) or back (showWhenLocked). This is // possible // because the DisplayArea underneath TaskDisplayArea only contains TYPE_WALLPAPER // windows. final int position = showWhenLocked ? POSITION_BOTTOM : POSITION_TOP; // Note: Moving all the way to the front or back breaks ordering based on addition times. // Note: Moving all the way to the front or back breaks ordering based on addition // times. // We should never have more than one non-animating token of each type. getParent().positionChildAt(position, this /* child */, false /*includingParents */); } } boolean canShowWhenLocked() { return mShowWhenLocked; Loading Loading
services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +5 −2 Original line number Diff line number Diff line Loading @@ -923,6 +923,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub if (DEBUG) Slog.v(TAG, "Adding window token: " + mToken); mWindowManagerInternal.addWindowToken(mToken, TYPE_WALLPAPER, mDisplayId, null /* options */); mWindowManagerInternal.setWallpaperShowWhenLocked( mToken, (wallpaper.mWhich & FLAG_LOCK) != 0); final DisplayData wpdData = mWallpaperDisplayHelper.getDisplayDataOrCreate(mDisplayId); try { Loading Loading @@ -1415,12 +1417,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub 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); } } ); }); } } Loading
services/core/java/com/android/server/wm/WallpaperController.java +29 −9 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.H.WALLPAPER_DRAW_PENDING_TIMEOUT; import android.annotation.Nullable; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Point; import android.graphics.Rect; Loading @@ -55,6 +56,7 @@ import android.view.WindowManager; import android.view.animation.Animation; import android.window.ScreenCapture; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.protolog.ProtoLogImpl; import com.android.internal.protolog.common.ProtoLog; Loading @@ -72,7 +74,7 @@ import java.util.function.Consumer; class WallpaperController { private static final String TAG = TAG_WITH_CLASS_NAME ? "WallpaperController" : TAG_WM; private WindowManagerService mService; private final DisplayContent mDisplayContent; private DisplayContent mDisplayContent; private final ArrayList<WallpaperWindowToken> mWallpaperTokens = new ArrayList<>(); Loading Loading @@ -120,9 +122,19 @@ class WallpaperController { private boolean mShouldOffsetWallpaperCenter; final boolean mEnableSeparateLockScreenEngine; private final ToBooleanFunction<WindowState> mFindWallpaperTargetFunction = w -> { if ((w.mAttrs.type == TYPE_WALLPAPER)) { if (mFindResults.topWallpaper == null || mFindResults.resetTopWallpaper) { WallpaperWindowToken token = w.mToken.asWallpaperToken(); if (token == null) { Slog.w(TAG, "Window " + w + " has wallpaper type but not wallpaper token"); return false; } if (!token.canShowWhenLocked() && mDisplayContent.isKeyguardLocked()) { return false; } mFindResults.setTopWallpaper(w); mFindResults.resetTopWallpaper = false; } Loading Loading @@ -249,11 +261,14 @@ class WallpaperController { WallpaperController(WindowManagerService service, DisplayContent displayContent) { mService = service; mDisplayContent = displayContent; mMaxWallpaperScale = service.mContext.getResources() .getFloat(com.android.internal.R.dimen.config_wallpaperMaxScale); mShouldOffsetWallpaperCenter = service.mContext.getResources() .getBoolean( Resources resources = service.mContext.getResources(); mMaxWallpaperScale = resources.getFloat(com.android.internal.R.dimen.config_wallpaperMaxScale); mShouldOffsetWallpaperCenter = resources.getBoolean( com.android.internal.R.bool.config_offsetWallpaperToCenterOfLargestDisplay); mEnableSeparateLockScreenEngine = resources.getBoolean(R.bool.config_independentLockscreenLiveWallpaper); } void resetLargestDisplay(Display display) { Loading Loading @@ -753,10 +768,10 @@ class WallpaperController { result.setWallpaperTarget(wallpaperTarget); } private void updateWallpaperTokens(boolean visible) { private void updateWallpaperTokens(boolean visibility, boolean locked) { for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) { final WallpaperWindowToken token = mWallpaperTokens.get(curTokenNdx); token.updateWallpaperWindows(visible); token.updateWallpaperWindows(visibility && (!locked || token.canShowWhenLocked())); } } Loading Loading @@ -794,7 +809,13 @@ class WallpaperController { } } updateWallpaperTokens(visible); // Keep both wallpapers visible unless the keyguard is locked (then hide private wp) updateWallpaperTokens(visible, mDisplayContent.isKeyguardLocked()); if (DEBUG_WALLPAPER) { Slog.v(TAG, "adjustWallpaperWindows: wallpaper visibility " + visible + ", lock visibility " + mDisplayContent.isKeyguardLocked()); } if (visible && mLastFrozen != mFindResults.isWallpaperTargetForLetterbox) { mLastFrozen = mFindResults.isWallpaperTargetForLetterbox; Loading Loading @@ -896,7 +917,6 @@ class WallpaperController { mWallpaperTokens.remove(token); } @VisibleForTesting boolean canScreenshotWallpaper() { return canScreenshotWallpaper(getTopVisibleWallpaper()); Loading
services/core/java/com/android/server/wm/WallpaperWindowToken.java +12 −8 Original line number Diff line number Diff line Loading @@ -76,15 +76,19 @@ class WallpaperWindowToken extends WindowToken { return; } mShowWhenLocked = showWhenLocked; // Move the window token to the front (private) or back (showWhenLocked). This is possible // because the DisplayArea underneath TaskDisplayArea only contains TYPE_WALLPAPER windows. if (mDisplayContent.mWallpaperController.mEnableSeparateLockScreenEngine) { // Move the window token to the front (private) or back (showWhenLocked). This is // possible // because the DisplayArea underneath TaskDisplayArea only contains TYPE_WALLPAPER // windows. final int position = showWhenLocked ? POSITION_BOTTOM : POSITION_TOP; // Note: Moving all the way to the front or back breaks ordering based on addition times. // Note: Moving all the way to the front or back breaks ordering based on addition // times. // We should never have more than one non-animating token of each type. getParent().positionChildAt(position, this /* child */, false /*includingParents */); } } boolean canShowWhenLocked() { return mShowWhenLocked; Loading