summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Jurka <mikejurka@google.com>2012-05-03 10:57:31 -0700
committerMichael Jurka <mikejurka@google.com>2012-05-09 20:25:28 -0700
commit21385cd83d7d7938b57a4acbaa236dd4c7804ed4 (patch)
tree4437d4ba6ded58da748f2231c2d87c5c406b807e
parent0fa152912e55f2d08f0a8d1260332a81e5706694 (diff)
downloadframeworks_base-21385cd83d7d7938b57a4acbaa236dd4c7804ed4.zip
frameworks_base-21385cd83d7d7938b57a4acbaa236dd4c7804ed4.tar.gz
frameworks_base-21385cd83d7d7938b57a4acbaa236dd4c7804ed4.tar.bz2
Making transition out of recents look better
- Fading out recents first, then scaling up app thumbnail - Fade Recents out over 130ms - Delay the window animation for 200ms first, then animate for 200ms (previously we didn't delay and then animated for 300ms) Bug: 6390075 Change-Id: Ia8c753bf7ee03d2acef6eb2772b28d88fe10a682
-rw-r--r--core/java/android/app/ActivityOptions.java38
-rw-r--r--core/java/android/view/IWindowManager.aidl2
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/res/layout-port/status_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/res/layout/system_bar_recent_panel.xml6
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/Choreographer.java21
-rw-r--r--packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java44
-rw-r--r--services/java/com/android/server/am/ActivityRecord.java8
-rwxr-xr-xservices/java/com/android/server/wm/WindowManagerService.java63
-rw-r--r--tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java2
10 files changed, 161 insertions, 35 deletions
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 3d0b7d8..523a78d 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -98,6 +98,8 @@ public class ActivityOptions {
public static final int ANIM_SCALE_UP = 2;
/** @hide */
public static final int ANIM_THUMBNAIL = 3;
+ /** @hide */
+ public static final int ANIM_THUMBNAIL_DELAYED = 4;
private String mPackageName;
private int mAnimationType = ANIM_NONE;
@@ -219,9 +221,38 @@ public class ActivityOptions {
*/
public static ActivityOptions makeThumbnailScaleUpAnimation(View source,
Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
+ return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, listener, false);
+ }
+
+ /**
+ * Create an ActivityOptions specifying an animation where a thumbnail
+ * is scaled from a given position to the new activity window that is
+ * being started. Before the animation, there is a short delay.
+ *
+ * @param source The View that this thumbnail is animating from. This
+ * defines the coordinate space for <var>startX</var> and <var>startY</var>.
+ * @param thumbnail The bitmap that will be shown as the initial thumbnail
+ * of the animation.
+ * @param startX The x starting location of the bitmap, relative to <var>source</var>.
+ * @param startY The y starting location of the bitmap, relative to <var>source</var>.
+ * @param listener Optional OnAnimationStartedListener to find out when the
+ * requested animation has started running. If for some reason the animation
+ * is not executed, the callback will happen immediately.
+ * @return Returns a new ActivityOptions object that you can use to
+ * supply these options as the options Bundle when starting an activity.
+ * @hide
+ */
+ public static ActivityOptions makeDelayedThumbnailScaleUpAnimation(View source,
+ Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener) {
+ return makeThumbnailScaleUpAnimation(source, thumbnail, startX, startY, listener, true);
+ }
+
+ private static ActivityOptions makeThumbnailScaleUpAnimation(View source,
+ Bitmap thumbnail, int startX, int startY, OnAnimationStartedListener listener,
+ boolean delayed) {
ActivityOptions opts = new ActivityOptions();
opts.mPackageName = source.getContext().getPackageName();
- opts.mAnimationType = ANIM_THUMBNAIL;
+ opts.mAnimationType = delayed ? ANIM_THUMBNAIL_DELAYED : ANIM_THUMBNAIL;
opts.mThumbnail = thumbnail;
int[] pts = new int[2];
source.getLocationOnScreen(pts);
@@ -258,7 +289,8 @@ public class ActivityOptions {
mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
mStartWidth = opts.getInt(KEY_ANIM_START_WIDTH, 0);
mStartHeight = opts.getInt(KEY_ANIM_START_HEIGHT, 0);
- } else if (mAnimationType == ANIM_THUMBNAIL) {
+ } else if (mAnimationType == ANIM_THUMBNAIL ||
+ mAnimationType == ANIM_THUMBNAIL_DELAYED) {
mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
mStartX = opts.getInt(KEY_ANIM_START_X, 0);
mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
@@ -359,6 +391,7 @@ public class ActivityOptions {
mStartHeight = otherOptions.mStartHeight;
break;
case ANIM_THUMBNAIL:
+ case ANIM_THUMBNAIL_DELAYED:
mAnimationType = otherOptions.mAnimationType;
mThumbnail = otherOptions.mThumbnail;
mStartX = otherOptions.mStartX;
@@ -401,6 +434,7 @@ public class ActivityOptions {
b.putInt(KEY_ANIM_START_HEIGHT, mStartHeight);
break;
case ANIM_THUMBNAIL:
+ case ANIM_THUMBNAIL_DELAYED:
b.putInt(KEY_ANIM_TYPE, mAnimationType);
b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
b.putInt(KEY_ANIM_START_X, mStartX);
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index e1f01db..c5a687a 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -84,7 +84,7 @@ interface IWindowManager
void overridePendingAppTransitionScaleUp(int startX, int startY, int startWidth,
int startHeight);
void overridePendingAppTransitionThumb(in Bitmap srcThumb, int startX, int startY,
- IRemoteCallback startedCallback);
+ IRemoteCallback startedCallback, boolean delayed);
void executeAppTransition();
void setAppStartingWindow(IBinder token, String pkg, int theme,
in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
diff --git a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
index ec2abe0..869b164 100644
--- a/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_recent_panel.xml
@@ -27,6 +27,12 @@
systemui:recentItemLayout="@layout/status_bar_recent_item"
>
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<FrameLayout
android:id="@+id/recents_bg_protect"
android:background="@drawable/status_bar_recents_background"
diff --git a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
index 216dcb0..fc9fcf4 100644
--- a/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout-port/status_bar_recent_panel.xml
@@ -27,6 +27,12 @@
systemui:recentItemLayout="@layout/status_bar_recent_item"
>
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<FrameLayout
android:id="@+id/recents_bg_protect"
android:background="@drawable/status_bar_recents_background"
diff --git a/packages/SystemUI/res/layout/system_bar_recent_panel.xml b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
index c2b9e51..d5745c8 100644
--- a/packages/SystemUI/res/layout/system_bar_recent_panel.xml
+++ b/packages/SystemUI/res/layout/system_bar_recent_panel.xml
@@ -39,6 +39,12 @@
android:clipToPadding="false"
android:clipChildren="false">
+ <ImageView
+ android:id="@+id/recents_transition_placeholder_icon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="invisible" />
+
<com.android.systemui.recent.RecentsVerticalScrollView android:id="@+id/recents_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
index dc2f0be..a8c2020 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java
@@ -21,21 +21,21 @@ import android.animation.AnimatorSet;
import android.animation.AnimatorSet.Builder;
import android.animation.ObjectAnimator;
import android.graphics.drawable.Drawable;
-import android.util.Log;
import android.util.Slog;
import android.view.View;
+import android.view.ViewRootImpl;
/* package */ class Choreographer implements Animator.AnimatorListener {
// should group this into a multi-property animation
private static final int OPEN_DURATION = 136;
- private static final int CLOSE_DURATION = 250;
+ private static final int CLOSE_DURATION = 130;
private static final int SCRIM_DURATION = 400;
private static final String TAG = RecentsPanelView.TAG;
private static final boolean DEBUG = RecentsPanelView.DEBUG;
boolean mVisible;
int mPanelHeight;
- View mRootView;
+ RecentsPanelView mRootView;
View mScrimView;
View mContentView;
View mNoRecentAppsView;
@@ -45,7 +45,7 @@ import android.view.View;
// the panel will start to appear this many px from the end
final int HYPERSPACE_OFFRAMP = 200;
- public Choreographer(View root, View scrim, View content,
+ public Choreographer(RecentsPanelView root, View scrim, View content,
View noRecentApps, Animator.AnimatorListener listener) {
mRootView = root;
mScrimView = scrim;
@@ -67,7 +67,7 @@ import android.view.View;
end = 0;
} else {
start = y;
- end = y + HYPERSPACE_OFFRAMP;
+ end = y;
}
Animator posAnim = ObjectAnimator.ofFloat(mContentView, "translationY",
@@ -77,12 +77,12 @@ import android.view.View;
: new android.view.animation.AccelerateInterpolator(2.5f));
posAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
- Animator glowAnim = ObjectAnimator.ofFloat(mContentView, "alpha",
+ Animator fadeAnim = ObjectAnimator.ofFloat(mContentView, "alpha",
mContentView.getAlpha(), appearing ? 1.0f : 0.0f);
- glowAnim.setInterpolator(appearing
+ fadeAnim.setInterpolator(appearing
? new android.view.animation.AccelerateInterpolator(1.0f)
: new android.view.animation.DecelerateInterpolator(1.0f));
- glowAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
+ fadeAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION);
Animator noRecentAppsFadeAnim = null;
if (mNoRecentAppsView != null && // doesn't exist on large devices
@@ -96,7 +96,7 @@ import android.view.View;
}
mContentAnim = new AnimatorSet();
- final Builder builder = mContentAnim.play(glowAnim).with(posAnim);
+ final Builder builder = mContentAnim.play(fadeAnim).with(posAnim);
if (noRecentAppsFadeAnim != null) {
builder.with(noRecentAppsFadeAnim);
@@ -153,9 +153,10 @@ import android.view.View;
public void onAnimationEnd(Animator animation) {
if (DEBUG) Slog.d(TAG, "onAnimationEnd");
if (!mVisible) {
- mRootView.setVisibility(View.GONE);
+ mRootView.hideWindow();
}
mContentView.setLayerType(View.LAYER_TYPE_NONE, null);
+ mContentView.setAlpha(1f);
mContentAnim = null;
}
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 995ee43..feb1ac8 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -26,7 +26,9 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
+import android.graphics.Canvas;
import android.graphics.Matrix;
+import android.graphics.Rect;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
@@ -48,11 +50,9 @@ import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
-import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.PopupMenu;
-import android.widget.ScrollView;
import android.widget.TextView;
import com.android.systemui.R;
@@ -83,6 +83,9 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
private Choreographer mChoreo;
OnRecentsPanelVisibilityChangedListener mVisibilityChangedListener;
+ ImageView mPlaceholderThumbnail;
+ boolean mHideWindowAfterPlaceholderThumbnailIsHidden;
+
private RecentTasksLoader mRecentTasksLoader;
private ArrayList<TaskDescription> mRecentTaskDescriptions;
private Runnable mPreloadTasksRunnable;
@@ -283,7 +286,9 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
public void show(boolean show, boolean animate,
ArrayList<TaskDescription> recentTaskDescriptions, boolean firstScreenful) {
// For now, disable animations. We may want to re-enable in the future
- animate = false;
+ if (show) {
+ animate = false;
+ }
if (show) {
// Need to update list of recent apps before we set visibility so this view's
// content description is updated before it gets focus for TalkBack mode
@@ -687,11 +692,31 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
context.getSystemService(Context.ACTIVITY_SERVICE);
holder.thumbnailViewImage.setDrawingCacheEnabled(true);
Bitmap bm = holder.thumbnailViewImage.getDrawingCache();
- ActivityOptions opts = ActivityOptions.makeThumbnailScaleUpAnimation(
+ mPlaceholderThumbnail = (ImageView) findViewById(R.id.recents_transition_placeholder_icon);
+
+ final ImageView placeholderThumbnail = mPlaceholderThumbnail;
+ mHideWindowAfterPlaceholderThumbnailIsHidden = false;
+ placeholderThumbnail.setVisibility(VISIBLE);
+ Bitmap b2 = bm.copy(bm.getConfig(), true);
+ placeholderThumbnail.setImageBitmap(b2);
+
+ Rect r = new Rect();
+ holder.thumbnailViewImage.getGlobalVisibleRect(r);
+
+ placeholderThumbnail.setTranslationX(r.left);
+ placeholderThumbnail.setTranslationY(r.top);
+
+ show(false, true);
+
+ ActivityOptions opts = ActivityOptions.makeDelayedThumbnailScaleUpAnimation(
holder.thumbnailViewImage, bm, 0, 0,
new ActivityOptions.OnAnimationStartedListener() {
@Override public void onAnimationStarted() {
- hide(true);
+ mPlaceholderThumbnail = null;
+ placeholderThumbnail.setVisibility(INVISIBLE);
+ if (mHideWindowAfterPlaceholderThumbnailIsHidden) {
+ hideWindow();
+ }
}
});
if (ad.taskId >= 0) {
@@ -709,6 +734,15 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener
holder.thumbnailViewImage.setDrawingCacheEnabled(false);
}
+ public void hideWindow() {
+ if (mPlaceholderThumbnail != null) {
+ mHideWindowAfterPlaceholderThumbnailIsHidden = true;
+ } else {
+ setVisibility(GONE);
+ mHideWindowAfterPlaceholderThumbnailIsHidden = false;
+ }
+ }
+
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
handleOnClick(view);
}
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java
index 97bfd6f..ad80273 100644
--- a/services/java/com/android/server/am/ActivityRecord.java
+++ b/services/java/com/android/server/am/ActivityRecord.java
@@ -552,7 +552,8 @@ final class ActivityRecord {
void applyOptionsLocked() {
if (pendingOptions != null) {
- switch (pendingOptions.getAnimationType()) {
+ final int animationType = pendingOptions.getAnimationType();
+ switch (animationType) {
case ActivityOptions.ANIM_CUSTOM:
service.mWindowManager.overridePendingAppTransition(
pendingOptions.getPackageName(),
@@ -571,10 +572,13 @@ final class ActivityRecord {
}
break;
case ActivityOptions.ANIM_THUMBNAIL:
+ case ActivityOptions.ANIM_THUMBNAIL_DELAYED:
+ boolean delayed = (animationType == ActivityOptions.ANIM_THUMBNAIL_DELAYED);
service.mWindowManager.overridePendingAppTransitionThumb(
pendingOptions.getThumbnail(),
pendingOptions.getStartX(), pendingOptions.getStartY(),
- pendingOptions.getOnAnimationStartListener());
+ pendingOptions.getOnAnimationStartListener(),
+ delayed);
if (intent.getSourceBounds() == null) {
intent.setSourceBounds(new Rect(pendingOptions.getStartX(),
pendingOptions.getStartY(),
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 8957edf..575496f 100755
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -512,6 +512,7 @@ public class WindowManagerService extends IWindowManager.Stub
int mNextAppTransitionType = ActivityOptions.ANIM_NONE;
String mNextAppTransitionPackage;
Bitmap mNextAppTransitionThumbnail;
+ boolean mNextAppTransitionDelayed;
IRemoteCallback mNextAppTransitionCallback;
int mNextAppTransitionEnter;
int mNextAppTransitionExit;
@@ -3176,7 +3177,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
private Animation createThumbnailAnimationLocked(int transit,
- boolean enter, boolean thumb) {
+ boolean enter, boolean thumb, boolean delayed) {
Animation a;
final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
@@ -3186,6 +3187,7 @@ public class WindowManagerService extends IWindowManager.Stub
// it is the standard duration for that. Otherwise we use the longer
// task transition duration.
int duration;
+ int delayDuration = delayed ? 200 : 0;
switch (transit) {
case WindowManagerPolicy.TRANSIT_ACTIVITY_OPEN:
case WindowManagerPolicy.TRANSIT_ACTIVITY_CLOSE:
@@ -3193,7 +3195,7 @@ public class WindowManagerService extends IWindowManager.Stub
com.android.internal.R.integer.config_shortAnimTime);
break;
default:
- duration = 300;
+ duration = delayed ? 200 : 300;
break;
}
if (thumb) {
@@ -3201,6 +3203,7 @@ public class WindowManagerService extends IWindowManager.Stub
// filling the screen.
float scaleW = mAppDisplayWidth/thumbWidth;
float scaleH = mAppDisplayHeight/thumbHeight;
+
Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
computePivot(mNextAppTransitionStartX, 1/scaleW),
computePivot(mNextAppTransitionStartY, 1/scaleH));
@@ -3210,17 +3213,38 @@ public class WindowManagerService extends IWindowManager.Stub
set.addAnimation(scale);
alpha.setDuration(duration);
set.addAnimation(alpha);
+ set.setFillBefore(true);
+ if (delayDuration > 0) {
+ set.setStartOffset(delayDuration);
+ }
a = set;
} else if (enter) {
// Entering app zooms out from the center of the thumbnail.
- float scaleW = thumbWidth/mAppDisplayWidth;
- float scaleH = thumbHeight/mAppDisplayHeight;
- a = new ScaleAnimation(scaleW, 1, scaleH, 1,
+ float scaleW = thumbWidth / mAppDisplayWidth;
+ float scaleH = thumbHeight / mAppDisplayHeight;
+ AnimationSet set = new AnimationSet(true);
+ Animation scale = new ScaleAnimation(scaleW, 1, scaleH, 1,
computePivot(mNextAppTransitionStartX, scaleW),
computePivot(mNextAppTransitionStartY, scaleH));
- a.setDuration(duration);
+ scale.setDuration(duration);
+ scale.setFillBefore(true);
+ set.addAnimation(scale);
+ // Need to set an alpha animation on the entering app window
+ // in case it appears one frame before the thumbnail window
+ // (this solves flicker)
+ Animation alpha = new AlphaAnimation(0, 1);
+ alpha.setDuration(1);
+ alpha.setFillAfter(true);
+ set.addAnimation(alpha);
+ a = set;
+ if (delayDuration > 0) {
+ a.setStartOffset(delayDuration);
+ }
} else {
a = createExitAnimationLocked(transit, duration);
+ if (delayDuration > 0) {
+ a.setStartOffset(delayDuration);
+ }
}
a.setFillAfter(true);
final Interpolator interpolator = AnimationUtils.loadInterpolator(mContext,
@@ -3252,12 +3276,18 @@ public class WindowManagerService extends IWindowManager.Stub
if (DEBUG_ANIM) Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
+ " anim=" + a + " nextAppTransition=ANIM_SCALE_UP"
+ " transit=" + transit + " Callers " + Debug.getCallers(3));
- } else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL) {
- a = createThumbnailAnimationLocked(transit, enter, false);
+ } else if (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL ||
+ mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_DELAYED) {
+ boolean delayed = (mNextAppTransitionType == ActivityOptions.ANIM_THUMBNAIL_DELAYED);
+ a = createThumbnailAnimationLocked(transit, enter, false, delayed);
initialized = true;
- if (DEBUG_ANIM) Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
- + " anim=" + a + " nextAppTransition=ANIM_THUMBNAIL"
- + " transit=" + transit + " Callers " + Debug.getCallers(3));
+
+ if (DEBUG_ANIM) {
+ String animName = delayed ? "ANIM_THUMBNAIL_DELAYED" : "ANIM_THUMBNAIL";
+ Slog.v(TAG, "applyAnimation: wtoken=" + wtoken
+ + " anim=" + a + " nextAppTransition=" + animName
+ + " transit=" + transit + " Callers " + Debug.getCallers(3));
+ }
} else {
int animAttr = 0;
switch (transit) {
@@ -3879,11 +3909,13 @@ public class WindowManagerService extends IWindowManager.Stub
}
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX,
- int startY, IRemoteCallback startedCallback) {
+ int startY, IRemoteCallback startedCallback, boolean delayed) {
if (mNextAppTransition != WindowManagerPolicy.TRANSIT_UNSET) {
- mNextAppTransitionType = ActivityOptions.ANIM_THUMBNAIL;
+ mNextAppTransitionType =
+ delayed ? ActivityOptions.ANIM_THUMBNAIL_DELAYED : ActivityOptions.ANIM_THUMBNAIL;
mNextAppTransitionPackage = null;
mNextAppTransitionThumbnail = srcThumb;
+ mNextAppTransitionDelayed = delayed;
mNextAppTransitionStartX = startX;
mNextAppTransitionStartY = startY;
mNextAppTransitionCallback = startedCallback;
@@ -8024,7 +8056,8 @@ public class WindowManagerService extends IWindowManager.Stub
drawSurface.unlockCanvasAndPost(c);
drawSurface.release();
topOpeningApp.mAppAnimator.thumbnailLayer = topOpeningLayer;
- Animation anim = createThumbnailAnimationLocked(transit, true, true);
+ Animation anim = createThumbnailAnimationLocked(
+ transit, true, true, mNextAppTransitionDelayed);
topOpeningApp.mAppAnimator.thumbnailAnimation = anim;
anim.restrictDuration(MAX_ANIMATION_DURATION);
anim.scaleCurrentDuration(mTransitionAnimationScale);
@@ -9602,10 +9635,12 @@ public class WindowManagerService extends IWindowManager.Stub
pw.println(mNextAppTransitionStartHeight);
break;
case ActivityOptions.ANIM_THUMBNAIL:
+ case ActivityOptions.ANIM_THUMBNAIL_DELAYED:
pw.print(" mNextAppTransitionThumbnail=");
pw.print(mNextAppTransitionThumbnail);
pw.print(" mNextAppTransitionStartX="); pw.print(mNextAppTransitionStartX);
pw.print(" mNextAppTransitionStartY="); pw.println(mNextAppTransitionStartY);
+ pw.print(" mNextAppTransitionDelayed="); pw.println(mNextAppTransitionDelayed);
break;
}
pw.print(" mStartingIconInTransition="); pw.print(mStartingIconInTransition);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
index 85b67d5..a4b2125 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindowManager.java
@@ -240,7 +240,7 @@ public class BridgeWindowManager implements IWindowManager {
@Override
public void overridePendingAppTransitionThumb(Bitmap srcThumb, int startX, int startY,
- IRemoteCallback startedCallback) throws RemoteException {
+ IRemoteCallback startedCallback, boolean delayed) throws RemoteException {
// TODO Auto-generated method stub
}