Skip to content

Commit 507a2ee

Browse files
author
Craig Mautner
committed
Update wallpaper visibility at time of hide/show.
Call the Window client method dispatchAppVisibility when hiding or showing wallpaper rather than wait until the next call to performLayoutAndPlaceSurfaces. Fixes bug 6645473. Change-Id: I363f69f8db0affff92308e11ce52546401959d8f
1 parent f958732 commit 507a2ee

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

services/java/com/android/server/wm/WindowAnimator.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ void hideWallpapersLocked(final WindowState w) {
9393
final WindowStateAnimator winAnimator = wallpaper.mWinAnimator;
9494
if (!winAnimator.mLastHidden) {
9595
winAnimator.hide();
96+
mService.dispatchWallpaperVisibility(wallpaper, false);
9697
mPendingLayoutChanges |= WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
9798
}
9899
}

services/java/com/android/server/wm/WindowManagerService.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1872,16 +1872,7 @@ else if (foundI > oldI) {
18721872

18731873
// First, make sure the client has the current visibility
18741874
// state.
1875-
if (wallpaper.mWallpaperVisible != visible) {
1876-
wallpaper.mWallpaperVisible = visible;
1877-
try {
1878-
if (DEBUG_VISIBILITY || DEBUG_WALLPAPER) Slog.v(TAG,
1879-
"Setting visibility of wallpaper " + wallpaper
1880-
+ ": " + visible);
1881-
wallpaper.mClient.dispatchAppVisibility(visible);
1882-
} catch (RemoteException e) {
1883-
}
1884-
}
1875+
dispatchWallpaperVisibility(wallpaper, visible);
18851876

18861877
wallpaper.mWinAnimator.mAnimLayer = wallpaper.mLayer + mWallpaperAnimLayerAdjustment;
18871878
if (DEBUG_LAYERS || DEBUG_WALLPAPER) Slog.v(TAG, "adjustWallpaper win "
@@ -2091,6 +2082,24 @@ void updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) {
20912082
}
20922083
}
20932084

2085+
/**
2086+
* Check wallpaper for visiblity change and notify window if so.
2087+
* @param wallpaper The wallpaper to test and notify.
2088+
* @param visible Current visibility.
2089+
*/
2090+
void dispatchWallpaperVisibility(final WindowState wallpaper, final boolean visible) {
2091+
if (wallpaper.mWallpaperVisible != visible) {
2092+
wallpaper.mWallpaperVisible = visible;
2093+
try {
2094+
if (DEBUG_VISIBILITY || DEBUG_WALLPAPER) Slog.v(TAG,
2095+
"Updating visibility of wallpaper " + wallpaper
2096+
+ ": " + visible + " Callers=" + Debug.getCallers(2));
2097+
wallpaper.mClient.dispatchAppVisibility(visible);
2098+
} catch (RemoteException e) {
2099+
}
2100+
}
2101+
}
2102+
20942103
void updateWallpaperVisibilityLocked() {
20952104
final boolean visible = isWallpaperVisible(mWallpaperTarget);
20962105
final int dw = mAppDisplayWidth;
@@ -2115,16 +2124,7 @@ void updateWallpaperVisibilityLocked() {
21152124
updateWallpaperOffsetLocked(wallpaper, dw, dh, false);
21162125
}
21172126

2118-
if (wallpaper.mWallpaperVisible != visible) {
2119-
wallpaper.mWallpaperVisible = visible;
2120-
try {
2121-
if (DEBUG_VISIBILITY || DEBUG_WALLPAPER) Slog.v(TAG,
2122-
"Updating visibility of wallpaper " + wallpaper
2123-
+ ": " + visible);
2124-
wallpaper.mClient.dispatchAppVisibility(visible);
2125-
} catch (RemoteException e) {
2126-
}
2127-
}
2127+
dispatchWallpaperVisibility(wallpaper, visible);
21282128
}
21292129
}
21302130
}

services/java/com/android/server/wm/WindowStateAnimator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1122,6 +1122,9 @@ public void prepareSurfaceLocked(final boolean recoveringMemory) {
11221122
+ " during relayout");
11231123
if (showSurfaceRobustlyLocked()) {
11241124
mLastHidden = false;
1125+
if (w.mIsWallpaper) {
1126+
mService.dispatchWallpaperVisibility(w, true);
1127+
}
11251128
} else {
11261129
w.mOrientationChanging = false;
11271130
}

0 commit comments

Comments
 (0)