diff options
-rw-r--r-- | api/6.xml | 19 | ||||
-rw-r--r-- | api/current.xml | 19 | ||||
-rw-r--r-- | core/java/android/app/WallpaperManager.java | 21 | ||||
-rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 14 | ||||
-rw-r--r-- | core/java/android/view/IWindow.aidl | 2 | ||||
-rw-r--r-- | core/java/android/view/IWindowSession.aidl | 4 | ||||
-rw-r--r-- | core/java/android/view/ViewRoot.java | 3 | ||||
-rw-r--r-- | core/java/com/android/internal/service/wallpaper/ImageWallpaper.java | 1 | ||||
-rw-r--r-- | core/java/com/android/internal/view/BaseIWindow.java | 2 | ||||
-rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 35 | ||||
-rw-r--r-- | tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java | 6 |
11 files changed, 108 insertions, 18 deletions
@@ -25097,6 +25097,21 @@ <exception name="IOException" type="java.io.IOException"> </exception> </method> +<method name="setWallpaperOffsetSteps" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="xStep" type="float"> +</parameter> +<parameter name="yStep" type="float"> +</parameter> +</method> <method name="setWallpaperOffsets" return="void" abstract="false" @@ -123675,6 +123690,10 @@ </parameter> <parameter name="yOffset" type="float"> </parameter> +<parameter name="xOffsetStep" type="float"> +</parameter> +<parameter name="yOffsetStep" type="float"> +</parameter> <parameter name="xPixelOffset" type="int"> </parameter> <parameter name="yPixelOffset" type="int"> diff --git a/api/current.xml b/api/current.xml index eaad28a..32d0f1e 100644 --- a/api/current.xml +++ b/api/current.xml @@ -25097,6 +25097,21 @@ <exception name="IOException" type="java.io.IOException"> </exception> </method> +<method name="setWallpaperOffsetSteps" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="xStep" type="float"> +</parameter> +<parameter name="yStep" type="float"> +</parameter> +</method> <method name="setWallpaperOffsets" return="void" abstract="false" @@ -123675,6 +123690,10 @@ </parameter> <parameter name="yOffset" type="float"> </parameter> +<parameter name="xOffsetStep" type="float"> +</parameter> +<parameter name="yOffsetStep" type="float"> +</parameter> <parameter name="xPixelOffset" type="int"> </parameter> <parameter name="yPixelOffset" type="int"> diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index 66a3396..e98b286 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -53,6 +53,8 @@ import java.io.InputStream; public class WallpaperManager { private static String TAG = "WallpaperManager"; private static boolean DEBUG = false; + private float mWallpaperXStep = -1; + private float mWallpaperYStep = -1; /** * Launch an activity for the user to pick the current global live @@ -575,14 +577,14 @@ public class WallpaperManager { * @param windowToken The window who these offsets should be associated * with, as returned by {@link android.view.View#getWindowToken() * View.getWindowToken()}. - * @param xOffset The offset olong the X dimension, from 0 to 1. + * @param xOffset The offset along the X dimension, from 0 to 1. * @param yOffset The offset along the Y dimension, from 0 to 1. */ public void setWallpaperOffsets(IBinder windowToken, float xOffset, float yOffset) { try { //Log.v(TAG, "Sending new wallpaper offsets from app..."); ViewRoot.getWindowSession(mContext.getMainLooper()).setWallpaperPosition( - windowToken, xOffset, yOffset); + windowToken, xOffset, yOffset, mWallpaperXStep, mWallpaperYStep); //Log.v(TAG, "...app returning after sending offsets!"); } catch (RemoteException e) { // Ignore. @@ -590,6 +592,19 @@ public class WallpaperManager { } /** + * For applications that use multiple virtual screens showing a wallpaper, + * specify the step size between virtual screens. For example, if the + * launcher has 5 virtual screens, it would specify an xStep of 0.5, + * since the X offset for those screens are 0.0, 0.5 and 1.0 + * @param xStep The X offset delta from one screen to the next one + * @param yStep The Y offset delta from one screen to the next one + */ + public void setWallpaperOffsetSteps(float xStep, float yStep) { + mWallpaperXStep = xStep; + mWallpaperYStep = yStep; + } + + /** * Send an arbitrary command to the current active wallpaper. * * @param windowToken The window who these offsets should be associated @@ -627,7 +642,7 @@ public class WallpaperManager { public void clearWallpaperOffsets(IBinder windowToken) { try { ViewRoot.getWindowSession(mContext.getMainLooper()).setWallpaperPosition( - windowToken, -1, -1); + windowToken, -1, -1, -1, -1); } catch (RemoteException e) { // Ignore. } diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 573be1e..e79832b 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -134,6 +134,8 @@ public abstract class WallpaperService extends Service { boolean mOffsetMessageEnqueued; float mPendingXOffset; float mPendingYOffset; + float mPendingXOffsetStep; + float mPendingYOffsetStep; boolean mPendingSync; MotionEvent mPendingMove; @@ -227,11 +229,14 @@ public abstract class WallpaperService extends Service { } @Override - public void dispatchWallpaperOffsets(float x, float y, boolean sync) { + public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, + boolean sync) { synchronized (mLock) { if (DEBUG) Log.v(TAG, "Dispatch wallpaper offsets: " + x + ", " + y); mPendingXOffset = x; mPendingYOffset = y; + mPendingXOffsetStep = xStep; + mPendingYOffsetStep = yStep; if (sync) { mPendingSync = true; } @@ -360,6 +365,7 @@ public abstract class WallpaperService extends Service { * WallpaperManager.setWallpaperOffsets()}. */ public void onOffsetsChanged(float xOffset, float yOffset, + float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) { } @@ -608,10 +614,14 @@ public abstract class WallpaperService extends Service { float xOffset; float yOffset; + float xOffsetStep; + float yOffsetStep; boolean sync; synchronized (mLock) { xOffset = mPendingXOffset; yOffset = mPendingYOffset; + xOffsetStep = mPendingXOffsetStep; + yOffsetStep = mPendingYOffsetStep; sync = mPendingSync; mPendingSync = false; mOffsetMessageEnqueued = false; @@ -622,7 +632,7 @@ public abstract class WallpaperService extends Service { final int xPixels = availw > 0 ? -(int)(availw*xOffset+.5f) : 0; final int availh = mIWallpaperEngine.mReqHeight-mCurHeight; final int yPixels = availh > 0 ? -(int)(availh*yOffset+.5f) : 0; - onOffsetsChanged(xOffset, yOffset, xPixels, yPixels); + onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixels, yPixels); if (sync) { try { diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl index 6bfc8b5..71302cb 100644 --- a/core/java/android/view/IWindow.aidl +++ b/core/java/android/view/IWindow.aidl @@ -62,7 +62,7 @@ oneway interface IWindow { /** * Called for wallpaper windows when their offsets change. */ - void dispatchWallpaperOffsets(float x, float y, boolean sync); + void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, boolean sync); void dispatchWallpaperCommand(String action, int x, int y, int z, in Bundle extras, boolean sync); diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl index 7e7a38f..b6b009b 100644 --- a/core/java/android/view/IWindowSession.aidl +++ b/core/java/android/view/IWindowSession.aidl @@ -113,8 +113,10 @@ interface IWindowSession { /** * For windows with the wallpaper behind them, and the wallpaper is * larger than the screen, set the offset within the screen. + * For multi screen launcher type applications, xstep and ystep indicate + * how big the increment is from one screen to another. */ - void setWallpaperPosition(IBinder windowToken, float x, float y); + void setWallpaperPosition(IBinder windowToken, float x, float y, float xstep, float ystep); void wallpaperOffsetsComplete(IBinder window); diff --git a/core/java/android/view/ViewRoot.java b/core/java/android/view/ViewRoot.java index f4593f5..bef3e58 100644 --- a/core/java/android/view/ViewRoot.java +++ b/core/java/android/view/ViewRoot.java @@ -2895,7 +2895,8 @@ public final class ViewRoot extends Handler implements ViewParent, } } - public void dispatchWallpaperOffsets(float x, float y, boolean sync) { + public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, + boolean sync) { if (sync) { try { sWindowSession.wallpaperOffsetsComplete(asBinder()); diff --git a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java index 6d29038..c09ecfb 100644 --- a/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java +++ b/core/java/com/android/internal/service/wallpaper/ImageWallpaper.java @@ -102,6 +102,7 @@ public class ImageWallpaper extends WallpaperService { @Override public void onOffsetsChanged(float xOffset, float yOffset, + float xOffsetStep, float yOffsetStep, int xPixels, int yPixels) { mXOffset = xOffset; mYOffset = yOffset; diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java index 2674262..15dcbd6 100644 --- a/core/java/com/android/internal/view/BaseIWindow.java +++ b/core/java/com/android/internal/view/BaseIWindow.java @@ -94,7 +94,7 @@ public class BaseIWindow extends IWindow.Stub { public void closeSystemDialogs(String reason) { } - public void dispatchWallpaperOffsets(float x, float y, boolean sync) { + public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, boolean sync) { if (sync) { try { mSession.wallpaperOffsetsComplete(asBinder()); diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 9acc97a..69f4b89 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -433,6 +433,8 @@ public class WindowManagerService extends IWindowManager.Stub int mWallpaperAnimLayerAdjustment; float mLastWallpaperX = -1; float mLastWallpaperY = -1; + float mLastWallpaperXStep = -1; + float mLastWallpaperYStep = -1; // This is set when we are waiting for a wallpaper to tell us it is done // changing its scroll position. WindowState mWaitingOnWallpaper; @@ -1465,9 +1467,11 @@ public class WindowManagerService extends IWindowManager.Stub if (visible) { if (mWallpaperTarget.mWallpaperX >= 0) { mLastWallpaperX = mWallpaperTarget.mWallpaperX; + mLastWallpaperXStep = mWallpaperTarget.mWallpaperXStep; } if (mWallpaperTarget.mWallpaperY >= 0) { mLastWallpaperY = mWallpaperTarget.mWallpaperY; + mLastWallpaperYStep = mWallpaperTarget.mWallpaperYStep; } } @@ -1570,6 +1574,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean changed = false; boolean rawChanged = false; float wpx = mLastWallpaperX >= 0 ? mLastWallpaperX : 0.5f; + float wpxs = mLastWallpaperXStep >= 0 ? mLastWallpaperXStep : -1.0f; int availw = wallpaperWin.mFrame.right-wallpaperWin.mFrame.left-dw; int offset = availw > 0 ? -(int)(availw*wpx+.5f) : 0; changed = wallpaperWin.mXOffset != offset; @@ -1578,12 +1583,14 @@ public class WindowManagerService extends IWindowManager.Stub + wallpaperWin + " x: " + offset); wallpaperWin.mXOffset = offset; } - if (wallpaperWin.mWallpaperX != wpx) { + if (wallpaperWin.mWallpaperX != wpx || wallpaperWin.mWallpaperXStep != wpxs) { wallpaperWin.mWallpaperX = wpx; + wallpaperWin.mWallpaperXStep = wpxs; rawChanged = true; } float wpy = mLastWallpaperY >= 0 ? mLastWallpaperY : 0.5f; + float wpys = mLastWallpaperYStep >= 0 ? mLastWallpaperYStep : -1.0f; int availh = wallpaperWin.mFrame.bottom-wallpaperWin.mFrame.top-dh; offset = availh > 0 ? -(int)(availh*wpy+.5f) : 0; if (wallpaperWin.mYOffset != offset) { @@ -1592,8 +1599,9 @@ public class WindowManagerService extends IWindowManager.Stub changed = true; wallpaperWin.mYOffset = offset; } - if (wallpaperWin.mWallpaperY != wpy) { + if (wallpaperWin.mWallpaperY != wpy || wallpaperWin.mWallpaperYStep != wpys) { wallpaperWin.mWallpaperY = wpy; + wallpaperWin.mWallpaperYStep = wpys; rawChanged = true; } @@ -1606,7 +1614,8 @@ public class WindowManagerService extends IWindowManager.Stub mWaitingOnWallpaper = wallpaperWin; } wallpaperWin.mClient.dispatchWallpaperOffsets( - wallpaperWin.mWallpaperX, wallpaperWin.mWallpaperY, sync); + wallpaperWin.mWallpaperX, wallpaperWin.mWallpaperY, + wallpaperWin.mWallpaperXStep, wallpaperWin.mWallpaperYStep, sync); if (sync) { if (mWaitingOnWallpaper != null) { long start = SystemClock.uptimeMillis(); @@ -2181,10 +2190,13 @@ public class WindowManagerService extends IWindowManager.Stub } } - public void setWindowWallpaperPositionLocked(WindowState window, float x, float y) { + public void setWindowWallpaperPositionLocked(WindowState window, float x, float y, + float xStep, float yStep) { if (window.mWallpaperX != x || window.mWallpaperY != y) { window.mWallpaperX = x; window.mWallpaperY = y; + window.mWallpaperXStep = xStep; + window.mWallpaperYStep = yStep; if (updateWallpaperOffsetLocked(window, true)) { performLayoutAndPlaceSurfacesLocked(); } @@ -6585,12 +6597,12 @@ public class WindowManagerService extends IWindowManager.Stub } } - public void setWallpaperPosition(IBinder window, float x, float y) { + public void setWallpaperPosition(IBinder window, float x, float y, float xStep, float yStep) { synchronized(mWindowMap) { long ident = Binder.clearCallingIdentity(); try { setWindowWallpaperPositionLocked(windowForClientLocked(this, window), - x, y); + x, y, xStep, yStep); } finally { Binder.restoreCallingIdentity(ident); } @@ -6804,7 +6816,12 @@ public class WindowManagerService extends IWindowManager.Stub // wallpaper; if a wallpaper window: the currently applied offset. float mWallpaperX = -1; float mWallpaperY = -1; - + + // If a window showing a wallpaper: what fraction of the offset + // range corresponds to a full virtual screen. + float mWallpaperXStep = -1; + float mWallpaperYStep = -1; + // Wallpaper windows: pixels offset based on above variables. int mXOffset; int mYOffset; @@ -8037,6 +8054,10 @@ public class WindowManagerService extends IWindowManager.Stub pw.print(prefix); pw.print("mWallpaperX="); pw.print(mWallpaperX); pw.print(" mWallpaperY="); pw.println(mWallpaperY); } + if (mWallpaperXStep != -1 || mWallpaperYStep != -1) { + pw.print(prefix); pw.print("mWallpaperXStep="); pw.print(mWallpaperXStep); + pw.print(" mWallpaperYStep="); pw.println(mWallpaperYStep); + } } @Override diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java index f0223e8..c455977 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -1060,7 +1060,8 @@ public final class Bridge implements ILayoutBridge { } @SuppressWarnings("unused") - public void setWallpaperPosition(IBinder window, float x, float y) { + public void setWallpaperPosition(IBinder window, float x, float y, + float xStep, float yStep) { // pass for now. } @@ -1140,7 +1141,8 @@ public final class Bridge implements ILayoutBridge { } @SuppressWarnings("unused") - public void dispatchWallpaperOffsets(float x, float y, boolean sync) { + public void dispatchWallpaperOffsets(float x, float y, float xStep, float yStep, + boolean sync) { // pass for now. } |