diff options
| -rw-r--r-- | api/current.xml | 35 | ||||
| -rw-r--r-- | core/java/android/view/animation/Animation.java | 28 | ||||
| -rw-r--r-- | core/res/res/anim/wallpaper_close_enter.xml | 15 | ||||
| -rw-r--r-- | core/res/res/anim/wallpaper_close_exit.xml | 13 | ||||
| -rw-r--r-- | core/res/res/anim/wallpaper_open_enter.xml | 13 | ||||
| -rw-r--r-- | core/res/res/anim/wallpaper_open_exit.xml | 15 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 | ||||
| -rw-r--r-- | services/java/com/android/server/WindowManagerService.java | 20 |
9 files changed, 135 insertions, 8 deletions
diff --git a/api/current.xml b/api/current.xml index 2672d5388047..c47fd5a3d396 100644 --- a/api/current.xml +++ b/api/current.xml @@ -2825,6 +2825,17 @@ visibility="public" > </field> +<field name="detachWallpaper" + type="int" + transient="false" + volatile="false" + value="16843430" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="detailColumn" type="int" transient="false" @@ -162482,6 +162493,17 @@ visibility="protected" > </method> +<method name="getDetachWallpaper" + return="boolean" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> <method name="getDuration" return="long" abstract="false" @@ -162728,6 +162750,19 @@ <parameter name="listener" type="android.view.animation.Animation.AnimationListener"> </parameter> </method> +<method name="setDetachWallpaper" + return="void" + abstract="false" + native="false" + synchronized="false" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +<parameter name="detachWallpaper" type="boolean"> +</parameter> +</method> <method name="setDuration" return="void" abstract="false" diff --git a/core/java/android/view/animation/Animation.java b/core/java/android/view/animation/Animation.java index 2f5e601f31eb..c8396c4d4979 100644 --- a/core/java/android/view/animation/Animation.java +++ b/core/java/android/view/animation/Animation.java @@ -175,6 +175,11 @@ public abstract class Animation implements Cloneable { */ private int mZAdjustment; + /** + * Don't animate the wallpaper. + */ + private boolean mDetachWallpaper = false; + private boolean mMore = true; private boolean mOneMoreTime = true; @@ -218,6 +223,8 @@ public abstract class Animation implements Cloneable { setZAdjustment(a.getInt(com.android.internal.R.styleable.Animation_zAdjustment, ZORDER_NORMAL)); + setDetachWallpaper(a.getBoolean(com.android.internal.R.styleable.Animation_detachWallpaper, false)); + ensureInterpolator(); a.recycle(); @@ -515,6 +522,19 @@ public abstract class Animation implements Cloneable { } /** + * If detachWallpaper is true, and this is a window animation of a window + * that has a wallpaper background, then the window will be detached from + * the wallpaper while it runs. That is, the animation will only be applied + * to the window, and the wallpaper behind it will remain static. + * + * @param detachWallpaper true if the wallpaper should be detached from the animation + * @attr ref android.R.styleable#Animation_detachWallpaper + */ + public void setDetachWallpaper(boolean detachWallpaper) { + mDetachWallpaper = detachWallpaper; + } + + /** * Gets the acceleration curve type for this animation. * * @return the {@link Interpolator} associated to this animation @@ -611,6 +631,14 @@ public abstract class Animation implements Cloneable { } /** + * Return value of {@link #setDetachWallpaper(boolean)}. + * @attr ref android.R.styleable#Animation_detachWallpaper + */ + public boolean getDetachWallpaper() { + return mDetachWallpaper; + } + + /** * <p>Indicates whether or not this animation will affect the transformation * matrix. For instance, a fade animation will not affect the matrix whereas * a scale animation will.</p> diff --git a/core/res/res/anim/wallpaper_close_enter.xml b/core/res/res/anim/wallpaper_close_enter.xml index 0d130098eea2..5bc299e6d149 100644 --- a/core/res/res/anim/wallpaper_close_enter.xml +++ b/core/res/res/anim/wallpaper_close_enter.xml @@ -18,7 +18,21 @@ --> <!-- This version zooms the new non-wallpaper down on top of the + wallpaper, without zooming the wallpaper itself. --> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/decelerate_interpolator" + android:zAdjustment="top"> + <scale android:fromXScale="2.0" android:toXScale="1.0" + android:fromYScale="2.0" android:toYScale="1.0" + android:pivotX="50%p" android:pivotY="50%p" + android:duration="@android:integer/config_mediumAnimTime" /> + <alpha android:fromAlpha="0" android:toAlpha="1.0" + android:duration="@android:integer/config_mediumAnimTime"/> +</set> + +<!-- This version zooms the new non-wallpaper down on top of the wallpaper. --> +<!-- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/decelerate_interpolator"> <scale android:fromXScale="2.0" android:toXScale="1.0" @@ -26,6 +40,7 @@ android:pivotX="50%p" android:pivotY="50%p" android:duration="@android:integer/config_mediumAnimTime" /> </set> +--> <!-- This version is a variation on the inter-activity slide that also scales the wallpaper. --> diff --git a/core/res/res/anim/wallpaper_close_exit.xml b/core/res/res/anim/wallpaper_close_exit.xml index 5d91e308f09a..c3ae6206a0eb 100644 --- a/core/res/res/anim/wallpaper_close_exit.xml +++ b/core/res/res/anim/wallpaper_close_exit.xml @@ -18,7 +18,19 @@ --> <!-- This version zooms the new non-wallpaper down on top of the + wallpaper, without zooming the wallpaper itself. --> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/decelerate_interpolator" + android:detachWallpaper="true"> + <scale android:fromXScale="1.0" android:toXScale=".5" + android:fromYScale="1.0" android:toYScale=".5" + android:pivotX="50%p" android:pivotY="50%p" + android:duration="@android:integer/config_mediumAnimTime" /> +</set> + +<!-- This version zooms the new non-wallpaper down on top of the wallpaper. The wallpaper here just stays fixed behind. --> +<!-- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/decelerate_interpolator" android:zAdjustment="top"> @@ -29,6 +41,7 @@ <alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="@android:integer/config_mediumAnimTime"/> </set> +--> <!-- This version is a variation on the inter-activity slide that also scales the wallpaper. --> diff --git a/core/res/res/anim/wallpaper_open_enter.xml b/core/res/res/anim/wallpaper_open_enter.xml index cf27cf045833..7fe7e1efde1a 100644 --- a/core/res/res/anim/wallpaper_open_enter.xml +++ b/core/res/res/anim/wallpaper_open_enter.xml @@ -17,8 +17,20 @@ */ --> +<!-- This version zooms the new non-wallpaper down on top of the + wallpaper, without zooming the wallpaper itself. --> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/decelerate_interpolator" + android:detachWallpaper="true"> + <scale android:fromXScale=".5" android:toXScale="1.0" + android:fromYScale=".5" android:toYScale="1.0" + android:pivotX="50%p" android:pivotY="50%p" + android:duration="@android:integer/config_mediumAnimTime" /> +</set> + <!-- This version zooms the new non-wallpaper up off the wallpaper the wallpaper. The wallpaper here just stays fixed behind. --> +<!-- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/decelerate_interpolator" android:zAdjustment="top"> @@ -29,6 +41,7 @@ <alpha android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="@android:integer/config_mediumAnimTime"/> </set> +--> <!-- This version is a variation on the inter-activity slide that also scales the wallpaper. --> diff --git a/core/res/res/anim/wallpaper_open_exit.xml b/core/res/res/anim/wallpaper_open_exit.xml index b7a539c1fc41..9489c6d28729 100644 --- a/core/res/res/anim/wallpaper_open_exit.xml +++ b/core/res/res/anim/wallpaper_open_exit.xml @@ -18,7 +18,21 @@ --> <!-- This version zooms the new non-wallpaper down on top of the + wallpaper, without zooming the wallpaper itself. --> +<set xmlns:android="http://schemas.android.com/apk/res/android" + android:interpolator="@anim/decelerate_interpolator" + android:zAdjustment="top"> + <scale android:fromXScale="1.0" android:toXScale="2.0" + android:fromYScale="1.0" android:toYScale="2.0" + android:pivotX="50%p" android:pivotY="50%p" + android:duration="@android:integer/config_mediumAnimTime" /> + <alpha android:fromAlpha="1.0" android:toAlpha="0" + android:duration="@android:integer/config_mediumAnimTime"/> +</set> + +<!-- This version zooms the new non-wallpaper down on top of the wallpaper. --> +<!-- <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@anim/decelerate_interpolator"> <scale android:fromXScale="1.0" android:toXScale="2.0" @@ -26,6 +40,7 @@ android:pivotX="50%p" android:pivotY="50%p" android:duration="@android:integer/config_mediumAnimTime" /> </set> +--> <!-- This version is a variation on the inter-activity slide that also scales the wallpaper. --> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 193fdb2bbe38..df2a715d35b1 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -2639,6 +2639,9 @@ content for the duration of the animation. --> <enum name="bottom" value="-1" /> </attr> + <!-- Special option for window animations: if this window is on top + of a wallpaper, don't animate the wallpaper with it. --> + <attr name="detachWallpaper" format="boolean" /> </declare-styleable> <declare-styleable name="RotateAnimation"> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 4d23ef4ef6ac..305e415e793c 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1170,6 +1170,7 @@ <public type="attr" name="detailColumn" /> <public type="attr" name="detailSocialSummary" /> <public type="attr" name="thumbnail" /> + <public type="attr" name="detachWallpaper" /> <public type="style" name="Theme.Wallpaper" /> <public type="style" name="Theme.Wallpaper.NoTitleBar" /> diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 38d2304fbcb4..f742f9fa023e 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -7320,18 +7320,22 @@ public class WindowManagerService extends IWindowManager.Stub // are currently targeting. if (mAttrs.type == TYPE_WALLPAPER && mLowerWallpaperTarget == null && mWallpaperTarget != null) { - if (mWallpaperTarget.mHasLocalTransformation) { + if (mWallpaperTarget.mHasLocalTransformation && + mWallpaperTarget.mAnimation != null && + !mWallpaperTarget.mAnimation.getDetachWallpaper()) { attachedTransformation = mWallpaperTarget.mTransformation; + if (DEBUG_WALLPAPER && attachedTransformation != null) { + Log.v(TAG, "WP target attached xform: " + attachedTransformation); + } } if (mWallpaperTarget.mAppToken != null && - mWallpaperTarget.mAppToken.hasTransformation) { + mWallpaperTarget.mAppToken.hasTransformation && + mWallpaperTarget.mAppToken.animation != null && + !mWallpaperTarget.mAppToken.animation.getDetachWallpaper()) { appTransformation = mWallpaperTarget.mAppToken.transformation; - } - if (DEBUG_WALLPAPER && attachedTransformation != null) { - Log.v(TAG, "WP target attached xform: " + attachedTransformation); - } - if (DEBUG_WALLPAPER && appTransformation != null) { - Log.v(TAG, "WP target app xform: " + appTransformation); + if (DEBUG_WALLPAPER && appTransformation != null) { + Log.v(TAG, "WP target app xform: " + appTransformation); + } } } |