Put animation background behind visible wallpaper

The new wallpaper positioning associated with multiple activity stacks
put animation backgrounds in front of the wallpaper. This caused
hideous jank. Testing for visible wallpaper and moving the background
behind it fixes the jank.

Fixes bug 10078282.
Possibly fixes bug 10247094.

Change-Id: I3f4e07accd7276d59725192081904b791f77781f
This commit is contained in:
Craig Mautner
2013-08-09 18:48:48 -07:00
parent 7a605df313
commit 6201c2ac41
2 changed files with 8 additions and 15 deletions

View File

@@ -210,7 +210,7 @@ public final class ActivityManagerService extends ActivityManagerNative
static final boolean DEBUG_BACKGROUND_BROADCAST = DEBUG_BROADCAST || false;
static final boolean DEBUG_CLEANUP = localLOGV || false;
static final boolean DEBUG_CONFIGURATION = localLOGV || false;
static final boolean DEBUG_FOCUS = true;
static final boolean DEBUG_FOCUS = false;
static final boolean DEBUG_IMMERSIVE = localLOGV || false;
static final boolean DEBUG_MU = localLOGV || false;
static final boolean DEBUG_OOM_ADJ = localLOGV || false;

View File

@@ -194,9 +194,6 @@ public class WindowManagerService extends IWindowManager.Stub
static final boolean PROFILE_ORIENTATION = false;
static final boolean localLOGV = DEBUG;
final static boolean REVERSE_ITERATOR = true;
final static boolean FORWARD_ITERATOR = false;
/** How much to multiply the policy's type layer, to reserve room
* for multiple windows of the same type and Z-ordering adjustment
* with TYPE_LAYER_OFFSET. */
@@ -9574,19 +9571,15 @@ public class WindowManagerService extends IWindowManager.Stub
return doRequest;
}
/** If a window that has an animation specifying a colored background is the current wallpaper
* target, then the color goes *below* the wallpaper so we don't cause the wallpaper to
/** If a window that has an animation specifying a colored background and the current wallpaper
* is visible, then the color goes *below* the wallpaper so we don't cause the wallpaper to
* suddenly disappear. */
int adjustAnimationBackground(WindowStateAnimator winAnimator) {
final WindowState win = winAnimator.mWin;
if (mWallpaperTarget == win || mLowerWallpaperTarget == win
|| mUpperWallpaperTarget == win) {
WindowList windows = win.getWindowList();
for (int i = windows.size() - 1; i >= 0; --i) {
WindowState testWin = windows.get(i);
if (testWin.mIsWallpaper) {
return testWin.mWinAnimator.mAnimLayer;
}
WindowList windows = winAnimator.mWin.getWindowList();
for (int i = windows.size() - 1; i >= 0; --i) {
WindowState testWin = windows.get(i);
if (testWin.mIsWallpaper && testWin.isVisibleNow()) {
return testWin.mWinAnimator.mAnimLayer;
}
}
return winAnimator.mAnimLayer;