Merge changes I5309c225,Id706da34 into udc-dev am: 17b2bb996f am: 6953b19e85

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21750181

Change-Id: I22f7fea3ea6e5ecde3d38735313cc2ece82c0fca
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Marzia Favaro
2023-03-06 17:12:02 +00:00
committed by Automerger Merge Worker
3 changed files with 45 additions and 18 deletions

View File

@@ -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 {
@@ -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);
}
}
);
});
}
}

View File

@@ -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;
@@ -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;
@@ -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<>();
@@ -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;
}
@@ -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) {
@@ -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()));
}
}
@@ -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;
@@ -896,7 +917,6 @@ class WallpaperController {
mWallpaperTokens.remove(token);
}
@VisibleForTesting
boolean canScreenshotWallpaper() {
return canScreenshotWallpaper(getTopVisibleWallpaper());

View File

@@ -76,14 +76,18 @@ class WallpaperWindowToken extends WindowToken {
return;
}
mShowWhenLocked = showWhenLocked;
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;
// 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.
// We should never have more than one non-animating token of each type.
getParent().positionChildAt(position, this /* child */, false /*includingParents */);
// 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() {