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

Commit 61462b43 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I1864d098 into eclair

* changes:
  Improve wallpaper offset handling.
parents 359f0b09 73e92b42
Loading
Loading
Loading
Loading
+60 −52
Original line number Diff line number Diff line
@@ -430,8 +430,8 @@ public class WindowManagerService extends IWindowManager.Stub
    // to another, and this is the higher one in Z-order.
    WindowState mUpperWallpaperTarget = null;
    int mWallpaperAnimLayerAdjustment;
    float mLastWallpaperX;
    float mLastWallpaperY;
    float mLastWallpaperX = -1;
    float mLastWallpaperY = -1;
    // Lock for waiting for the wallpaper.
    final Object mWaitingOnWallpaperLock = new Object();
    // This is set when we are waiting for a wallpaper to tell us it is done
@@ -1464,9 +1464,13 @@ public class WindowManagerService extends IWindowManager.Stub
        }
        
        if (visible) {
            if (mWallpaperTarget.mWallpaperX >= 0) {
                mLastWallpaperX = mWallpaperTarget.mWallpaperX;
            }
            if (mWallpaperTarget.mWallpaperY >= 0) {
                mLastWallpaperY = mWallpaperTarget.mWallpaperY;
            }
        }
        
        // Start stepping backwards from here, ensuring that our wallpaper windows
        // are correctly placed.
@@ -1566,35 +1570,33 @@ public class WindowManagerService extends IWindowManager.Stub
            boolean sync) {
        boolean changed = false;
        boolean rawChanged = false;
        if (mLastWallpaperX >= 0) {
        float wpx = mLastWallpaperX >= 0 ? mLastWallpaperX : 0.5f;
        int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw;
            int offset = availw > 0 ? -(int)(availw*mLastWallpaperX+.5f) : 0;
        int offset = availw > 0 ? -(int)(availw*wpx+.5f) : 0;
        changed = wallpaperWin.mXOffset != offset;
        if (changed) {
            if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
                    + wallpaperWin + " x: " + offset);
            wallpaperWin.mXOffset = offset;
        }
            if (wallpaperWin.mWallpaperX != mLastWallpaperX) {
                wallpaperWin.mWallpaperX = mLastWallpaperX;
        if (wallpaperWin.mWallpaperX != wpx) {
            wallpaperWin.mWallpaperX = wpx;
            rawChanged = true;
        }
        }
        
        if (mLastWallpaperY >= 0) {
        float wpy = mLastWallpaperY >= 0 ? mLastWallpaperY : 0.5f;
        int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh;
            int offset = availh > 0 ? -(int)(availh*mLastWallpaperY+.5f) : 0;
        offset = availh > 0 ? -(int)(availh*wpy+.5f) : 0;
        if (wallpaperWin.mYOffset != offset) {
            if (DEBUG_WALLPAPER) Log.v(TAG, "Update wallpaper "
                    + wallpaperWin + " y: " + offset);
            changed = true;
            wallpaperWin.mYOffset = offset;
        }
            if (wallpaperWin.mWallpaperY != mLastWallpaperY) {
                wallpaperWin.mWallpaperY = mLastWallpaperY;
        if (wallpaperWin.mWallpaperY != wpy) {
            wallpaperWin.mWallpaperY = wpy;
            rawChanged = true;
        }
        }
        
        if (rawChanged) {
            try {
@@ -1649,7 +1651,7 @@ public class WindowManagerService extends IWindowManager.Stub
        }
    }
    
    boolean updateWallpaperOffsetLocked(boolean sync) {
    boolean updateWallpaperOffsetLocked(WindowState changingTarget, boolean sync) {
        final int dw = mDisplay.getWidth();
        final int dh = mDisplay.getHeight();
        
@@ -1657,8 +1659,18 @@ public class WindowManagerService extends IWindowManager.Stub
        
        WindowState target = mWallpaperTarget;
        if (target != null) {
            if (target.mWallpaperX >= 0) {
                mLastWallpaperX = target.mWallpaperX;
            } else if (changingTarget.mWallpaperX >= 0) {
                mLastWallpaperX = changingTarget.mWallpaperX;
            }
            if (target.mWallpaperY >= 0) {
                mLastWallpaperY = target.mWallpaperY;
            } else if (changingTarget.mWallpaperY >= 0) {
                mLastWallpaperY = changingTarget.mWallpaperY;
            }
        }
        
        int curTokenIndex = mWallpaperTokens.size();
        while (curTokenIndex > 0) {
            curTokenIndex--;
@@ -1675,7 +1687,6 @@ public class WindowManagerService extends IWindowManager.Stub
                }
            }
        }
        }
        
        return changed;
    }
@@ -2179,14 +2190,11 @@ public class WindowManagerService extends IWindowManager.Stub
        if (window.mWallpaperX != x || window.mWallpaperY != y)  {
            window.mWallpaperX = x;
            window.mWallpaperY = y;
            
            if (mWallpaperTarget == window) {
                if (updateWallpaperOffsetLocked(true)) {
            if (updateWallpaperOffsetLocked(window, true)) {
                performLayoutAndPlaceSurfacesLocked();
            }
        }
    }
    }
    
    public int relayoutWindow(Session session, IWindow client,
            WindowManager.LayoutParams attrs, int requestedWidth,