diff --git a/api/current.xml b/api/current.xml
index 438acaabebc8d..a122bd9dfcfd4 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -4699,7 +4699,7 @@
type="int"
transient="false"
volatile="false"
- value="16843416"
+ value="16843420"
static="true"
final="true"
deprecated="not deprecated"
@@ -6492,7 +6492,7 @@
type="int"
transient="false"
volatile="false"
- value="16843417"
+ value="16843421"
static="true"
final="true"
deprecated="not deprecated"
@@ -7526,7 +7526,7 @@
type="int"
transient="false"
volatile="false"
- value="16843415"
+ value="16843419"
static="true"
final="true"
deprecated="not deprecated"
@@ -8611,7 +8611,7 @@
visibility="public"
>
-
-
-
+
+
+
+
+
+
+
+
-
-
+
diff --git a/core/res/res/anim/accelerate_interpolator.xml b/core/res/res/anim/accelerate_interpolator.xml
index c689c352c7f77..13f87f311487f 100644
--- a/core/res/res/anim/accelerate_interpolator.xml
+++ b/core/res/res/anim/accelerate_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/anticipate_interpolator.xml b/core/res/res/anim/anticipate_interpolator.xml
index 50a555a6766c0..7a16b5f4ab1f3 100644
--- a/core/res/res/anim/anticipate_interpolator.xml
+++ b/core/res/res/anim/anticipate_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/anticipate_overshoot_interpolator.xml b/core/res/res/anim/anticipate_overshoot_interpolator.xml
index 440a899f95491..d61ddd102cfac 100644
--- a/core/res/res/anim/anticipate_overshoot_interpolator.xml
+++ b/core/res/res/anim/anticipate_overshoot_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/bounce_interpolator.xml b/core/res/res/anim/bounce_interpolator.xml
index 406fbb9fd1591..d89ba491b6b56 100644
--- a/core/res/res/anim/bounce_interpolator.xml
+++ b/core/res/res/anim/bounce_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/decelerate_interpolator.xml b/core/res/res/anim/decelerate_interpolator.xml
index fff6616e51bbe..7b29fb3f85af0 100644
--- a/core/res/res/anim/decelerate_interpolator.xml
+++ b/core/res/res/anim/decelerate_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/linear_interpolator.xml b/core/res/res/anim/linear_interpolator.xml
index 70bbeccad52d5..f4d256a61a180 100644
--- a/core/res/res/anim/linear_interpolator.xml
+++ b/core/res/res/anim/linear_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/overshoot_interpolator.xml b/core/res/res/anim/overshoot_interpolator.xml
index c614e0b8f0d33..725ea4899faf3 100644
--- a/core/res/res/anim/overshoot_interpolator.xml
+++ b/core/res/res/anim/overshoot_interpolator.xml
@@ -18,4 +18,4 @@
*/
-->
-
+
diff --git a/core/res/res/anim/wallpaper_close_enter.xml b/core/res/res/anim/wallpaper_close_enter.xml
new file mode 100644
index 0000000000000..8e7d049ce8537
--- /dev/null
+++ b/core/res/res/anim/wallpaper_close_enter.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
diff --git a/core/res/res/anim/wallpaper_close_exit.xml b/core/res/res/anim/wallpaper_close_exit.xml
new file mode 100644
index 0000000000000..0a63990a15de9
--- /dev/null
+++ b/core/res/res/anim/wallpaper_close_exit.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/core/res/res/anim/wallpaper_activity_close_enter.xml b/core/res/res/anim/wallpaper_intra_close_enter.xml
similarity index 96%
rename from core/res/res/anim/wallpaper_activity_close_enter.xml
rename to core/res/res/anim/wallpaper_intra_close_enter.xml
index 9e9bd802fe1a0..b75745d20db14 100644
--- a/core/res/res/anim/wallpaper_activity_close_enter.xml
+++ b/core/res/res/anim/wallpaper_intra_close_enter.xml
@@ -23,7 +23,7 @@
android:zAdjustment="top">
diff --git a/core/res/res/anim/wallpaper_activity_close_exit.xml b/core/res/res/anim/wallpaper_intra_close_exit.xml
similarity index 96%
rename from core/res/res/anim/wallpaper_activity_close_exit.xml
rename to core/res/res/anim/wallpaper_intra_close_exit.xml
index badbbf02c0068..6a4e276ea632e 100644
--- a/core/res/res/anim/wallpaper_activity_close_exit.xml
+++ b/core/res/res/anim/wallpaper_intra_close_exit.xml
@@ -22,7 +22,7 @@
android:interpolator="@anim/accelerate_interpolator">
diff --git a/core/res/res/anim/wallpaper_activity_open_enter.xml b/core/res/res/anim/wallpaper_intra_open_enter.xml
similarity index 96%
rename from core/res/res/anim/wallpaper_activity_open_enter.xml
rename to core/res/res/anim/wallpaper_intra_open_enter.xml
index e60bac28776eb..a46bc42f45979 100644
--- a/core/res/res/anim/wallpaper_activity_open_enter.xml
+++ b/core/res/res/anim/wallpaper_intra_open_enter.xml
@@ -22,7 +22,7 @@
android:interpolator="@anim/decelerate_interpolator">
diff --git a/core/res/res/anim/wallpaper_activity_open_exit.xml b/core/res/res/anim/wallpaper_intra_open_exit.xml
similarity index 96%
rename from core/res/res/anim/wallpaper_activity_open_exit.xml
rename to core/res/res/anim/wallpaper_intra_open_exit.xml
index 01abbb717a8f0..0e9bc4a2d180e 100644
--- a/core/res/res/anim/wallpaper_activity_open_exit.xml
+++ b/core/res/res/anim/wallpaper_intra_open_exit.xml
@@ -23,7 +23,7 @@
android:zAdjustment="top">
diff --git a/core/res/res/anim/wallpaper_open_enter.xml b/core/res/res/anim/wallpaper_open_enter.xml
new file mode 100644
index 0000000000000..9daf9257f8df2
--- /dev/null
+++ b/core/res/res/anim/wallpaper_open_enter.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/core/res/res/anim/wallpaper_open_exit.xml b/core/res/res/anim/wallpaper_open_exit.xml
new file mode 100644
index 0000000000000..96fff94a27b10
--- /dev/null
+++ b/core/res/res/anim/wallpaper_open_exit.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 7e7bfca7ae7e0..1e71a99f19c70 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -979,26 +979,47 @@
(which is exiting the screen). -->
+
+
+
+
+
+
+
+
+
-
+ (which is entering the screen). The wallpaper remains
+ static behind the animation. -->
+
-
+ (which is exiting the screen). The wallpaper remains
+ static behind the animation. -->
+
-
+ (which is entering the screen). The wallpaper remains
+ static behind the animation. -->
+
-
+ (which is exiting the screen). The wallpaper remains
+ static behind the animation. -->
+
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 1a362f7e1acd3..3be3ef8b8b43f 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -1151,10 +1151,14 @@
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 55f81675ec3af..18b97657a533a 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -66,10 +66,14 @@
- @anim/task_open_exit
- @anim/task_close_enter
- @anim/task_close_exit
- - @anim/wallpaper_activity_open_enter
- - @anim/wallpaper_activity_open_exit
- - @anim/wallpaper_activity_close_enter
- - @anim/wallpaper_activity_close_exit
+ - @anim/wallpaper_open_enter
+ - @anim/wallpaper_open_exit
+ - @anim/wallpaper_close_enter
+ - @anim/wallpaper_close_exit
+ - @anim/wallpaper_intra_open_enter
+ - @anim/wallpaper_intra_open_exit
+ - @anim/wallpaper_intra_close_enter
+ - @anim/wallpaper_intra_close_exit
diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java
index 1ea1b3193c2fa..b4f47681f665d 100644
--- a/services/java/com/android/server/WindowManagerService.java
+++ b/services/java/com/android/server/WindowManagerService.java
@@ -1193,6 +1193,20 @@ public class WindowManagerService extends IWindowManager.Stub
moveInputMethodDialogsLocked(findDesiredInputMethodWindowIndexLocked(true));
}
+ final boolean isWallpaperVisible(WindowState wallpaperTarget) {
+ if (DEBUG_WALLPAPER) Log.v(TAG, "Wallpaper vis: target obscured="
+ + (wallpaperTarget != null ? Boolean.toString(wallpaperTarget.mObscured) : "??")
+ + " anim=" + ((wallpaperTarget != null && wallpaperTarget.mAppToken != null)
+ ? wallpaperTarget.mAppToken.animation : null)
+ + " upper=" + mUpperWallpaperTarget
+ + " lower=" + mLowerWallpaperTarget);
+ return (wallpaperTarget != null
+ && (!wallpaperTarget.mObscured || (wallpaperTarget.mAppToken != null
+ && wallpaperTarget.mAppToken.animation != null)))
+ || mUpperWallpaperTarget != null
+ || mLowerWallpaperTarget != null;
+ }
+
boolean adjustWallpaperWindowsLocked() {
boolean changed = false;
@@ -1352,7 +1366,7 @@ public class WindowManagerService extends IWindowManager.Stub
if (visible) {
// The window is visible to the compositor... but is it visible
// to the user? That is what the wallpaper cares about.
- visible = !foundW.mObscured;
+ visible = isWallpaperVisible(foundW);
if (DEBUG_WALLPAPER) Log.v(TAG, "Wallpaper visibility: " + visible);
// If the wallpaper target is animating, we may need to copy
@@ -1377,6 +1391,8 @@ public class WindowManagerService extends IWindowManager.Stub
foundW = wb;
foundI--;
}
+ } else {
+ if (DEBUG_WALLPAPER) Log.v(TAG, "Wallpaper not visible");
}
// Okay i is the position immediately above the wallpaper. Look at
@@ -1394,6 +1410,8 @@ public class WindowManagerService extends IWindowManager.Stub
while (curTokenIndex > 0) {
curTokenIndex--;
WindowToken token = mWallpaperTokens.get(curTokenIndex);
+ token.hidden = !visible;
+
int curWallpaperIndex = token.windows.size();
while (curWallpaperIndex > 0) {
curWallpaperIndex--;
@@ -1548,8 +1566,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
void updateWallpaperVisibilityLocked() {
- final boolean visible = mWallpaperTarget != null
- && !mWallpaperTarget.mObscured;
+ final boolean visible = isWallpaperVisible(mWallpaperTarget);
final int dw = mDisplay.getWidth();
final int dh = mDisplay.getHeight();
@@ -1557,6 +1574,8 @@ public class WindowManagerService extends IWindowManager.Stub
while (curTokenIndex > 0) {
curTokenIndex--;
WindowToken token = mWallpaperTokens.get(curTokenIndex);
+ token.hidden = !visible;
+
int curWallpaperIndex = token.windows.size();
while (curWallpaperIndex > 0) {
curWallpaperIndex--;
@@ -1569,7 +1588,7 @@ public class WindowManagerService extends IWindowManager.Stub
wallpaper.mWallpaperVisible = visible;
try {
if (DEBUG_VISIBILITY || DEBUG_WALLPAPER) Log.v(TAG,
- "Setting visibility of wallpaper " + wallpaper
+ "Updating visibility of wallpaper " + wallpaper
+ ": " + visible);
wallpaper.mClient.dispatchAppVisibility(visible);
} catch (RemoteException e) {
@@ -2408,15 +2427,25 @@ public class WindowManagerService extends IWindowManager.Stub
? com.android.internal.R.styleable.WindowAnimation_taskToBackEnterAnimation
: com.android.internal.R.styleable.WindowAnimation_taskToBackExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_ACTIVITY_OPEN:
+ case WindowManagerPolicy.TRANSIT_WALLPAPER_OPEN:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperActivityOpenEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperActivityOpenExitAnimation;
+ ? com.android.internal.R.styleable.WindowAnimation_wallpaperOpenEnterAnimation
+ : com.android.internal.R.styleable.WindowAnimation_wallpaperOpenExitAnimation;
break;
- case WindowManagerPolicy.TRANSIT_WALLPAPER_ACTIVITY_CLOSE:
+ case WindowManagerPolicy.TRANSIT_WALLPAPER_CLOSE:
animAttr = enter
- ? com.android.internal.R.styleable.WindowAnimation_wallpaperActivityCloseEnterAnimation
- : com.android.internal.R.styleable.WindowAnimation_wallpaperActivityCloseExitAnimation;
+ ? com.android.internal.R.styleable.WindowAnimation_wallpaperCloseEnterAnimation
+ : com.android.internal.R.styleable.WindowAnimation_wallpaperCloseExitAnimation;
+ break;
+ case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_OPEN:
+ animAttr = enter
+ ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenEnterAnimation
+ : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraOpenExitAnimation;
+ break;
+ case WindowManagerPolicy.TRANSIT_WALLPAPER_INTRA_CLOSE:
+ animAttr = enter
+ ? com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseEnterAnimation
+ : com.android.internal.R.styleable.WindowAnimation_wallpaperIntraCloseExitAnimation;
break;
}
a = loadAnimation(lp, animAttr);
@@ -7346,11 +7375,15 @@ public class WindowManagerService extends IWindowManager.Stub
}
/**
- * Return true if the window is opaque and fully drawn.
+ * Return true if the window is opaque and fully drawn. This indicates
+ * it may obscure windows behind it.
*/
boolean isOpaqueDrawn() {
- return mAttrs.format == PixelFormat.OPAQUE && mSurface != null
- && mAnimation == null && !mDrawPending && !mCommitDrawPending;
+ return (mAttrs.format == PixelFormat.OPAQUE
+ || mAttrs.type == TYPE_WALLPAPER)
+ && mSurface != null && mAnimation == null
+ && (mAppToken == null || mAppToken.animation == null)
+ && !mDrawPending && !mCommitDrawPending;
}
boolean needsBackgroundFiller(int screenWidth, int screenHeight) {
@@ -8964,6 +8997,8 @@ public class WindowManagerService extends IWindowManager.Stub
mToTopApps.clear();
}
+ WindowState oldWallpaper = mWallpaperTarget;
+
adjustWallpaperWindowsLocked();
wallpaperMayChange = false;
@@ -8971,54 +9006,66 @@ public class WindowManagerService extends IWindowManager.Stub
"New wallpaper target=" + mWallpaperTarget
+ ", lower target=" + mLowerWallpaperTarget
+ ", upper target=" + mUpperWallpaperTarget);
+ int foundWallpapers = 0;
if (mLowerWallpaperTarget != null) {
// Need to determine if both the closing and
// opening app token sets are wallpaper targets,
// in which case special animations are needed
// (since the wallpaper needs to stay static
// behind them).
- int found = 0;
- NN = mOpeningApps.size();
- for (i=0; i