From cfb9f2bca39772aecd072e2a30342a67b6319bbb Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Wed, 24 Aug 2011 10:51:49 -0700 Subject: [PATCH] Fix issue #5192141: systemui asplodes after enough tapping on the windowlist button Change-Id: I5afb2d54b531d9eac9435660616579324f239812 --- core/java/android/app/ActivityThread.java | 1 - packages/SystemUI/res/anim/recent_appear.xml | 2 +- .../src/com/android/systemui/recent/Choreographer.java | 5 ++++- .../com/android/systemui/recent/RecentsPanelView.java | 5 ++--- services/java/com/android/server/am/TaskRecord.java | 2 ++ .../java/com/android/server/wm/WindowManagerService.java | 9 +++++++++ 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 6fb79656b683c..e3075d763ed36 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -1943,7 +1943,6 @@ public final class ActivityThread { // we are back active so skip it. unscheduleGcIdler(); - Slog.i(TAG, "Launch: profileFd=" + r.profileFile + " stop=" + r.autoStopProfiler); if (r.profileFd != null) { mBoundApplication.setProfiler(r.profileFile, r.profileFd); mBoundApplication.startProfiling(); diff --git a/packages/SystemUI/res/anim/recent_appear.xml b/packages/SystemUI/res/anim/recent_appear.xml index 4400d9dcdce78..20fe052d4a252 100644 --- a/packages/SystemUI/res/anim/recent_appear.xml +++ b/packages/SystemUI/res/anim/recent_appear.xml @@ -16,5 +16,5 @@ diff --git a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java index 2d327c41c6eb5..9749a1dcdef82 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java +++ b/packages/SystemUI/src/com/android/systemui/recent/Choreographer.java @@ -29,6 +29,7 @@ import android.view.View; // 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 SCRIM_DURATION = 400; private static final String TAG = RecentsPanelView.TAG; private static final boolean DEBUG = RecentsPanelView.DEBUG; @@ -71,12 +72,14 @@ import android.view.View; posAnim.setInterpolator(appearing ? new android.view.animation.DecelerateInterpolator(2.5f) : new android.view.animation.AccelerateInterpolator(2.5f)); + posAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION); Animator glowAnim = ObjectAnimator.ofFloat(mContentView, "alpha", mContentView.getAlpha(), appearing ? 1.0f : 0.0f); glowAnim.setInterpolator(appearing ? new android.view.animation.AccelerateInterpolator(1.0f) : new android.view.animation.DecelerateInterpolator(1.0f)); + glowAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION); mContentAnim = new AnimatorSet(); final Builder builder = mContentAnim.play(glowAnim).with(posAnim); @@ -84,9 +87,9 @@ import android.view.View; if (background != null) { Animator bgAnim = ObjectAnimator.ofInt(background, "alpha", appearing ? 0 : 255, appearing ? 255 : 0); + bgAnim.setDuration(appearing ? SCRIM_DURATION : CLOSE_DURATION); builder.with(bgAnim); } - mContentAnim.setDuration(appearing ? OPEN_DURATION : CLOSE_DURATION); mContentAnim.addListener(this); if (mListener != null) { mContentAnim.addListener(mListener); diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 8c03ef8e206f6..9cc2c29129b24 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -39,7 +39,6 @@ import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.LayerDrawable; import android.net.Uri; import android.os.AsyncTask; import android.os.Handler; @@ -497,7 +496,7 @@ public class RecentsPanelView extends RelativeLayout synchronized (ad) { ad.mLabel = label; ad.mIcon = icon; - ad.setThumbnail(thumbs.mainThumbnail); + ad.setThumbnail(thumbs != null ? thumbs.mainThumbnail : null); } } @@ -591,7 +590,7 @@ public class RecentsPanelView extends RelativeLayout ActivityDescription ad = descriptions.get(i); loadActivityDescription(ad, i); long now = SystemClock.uptimeMillis(); - nextTime += 200; + nextTime += 150; if (nextTime > now) { try { Thread.sleep(nextTime-now); diff --git a/services/java/com/android/server/am/TaskRecord.java b/services/java/com/android/server/am/TaskRecord.java index e61a7f4e10d36..87129eaca73fe 100644 --- a/services/java/com/android/server/am/TaskRecord.java +++ b/services/java/com/android/server/am/TaskRecord.java @@ -116,6 +116,8 @@ class TaskRecord extends ThumbnailHolder { if (!askedCompatMode) { pw.print(prefix); pw.print("askedCompatMode="); pw.println(askedCompatMode); } + pw.print(prefix); pw.print("lastThumbnail="); pw.print(lastThumbnail); + pw.print(" lastDescription="); pw.println(lastDescription); pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime); pw.print(" (inactive for "); pw.print((getInactiveDuration()/1000)); pw.println("s)"); diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index 3df94a6555dd5..e258b1a45346d 100644 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -163,6 +163,7 @@ public class WindowManagerService extends IWindowManager.Stub static final boolean DEBUG_WALLPAPER = false; static final boolean DEBUG_DRAG = false; static final boolean DEBUG_SCREEN_ON = false; + static final boolean DEBUG_SCREENSHOT = false; static final boolean SHOW_SURFACE_ALLOC = false; static final boolean SHOW_TRANSACTIONS = false; static final boolean HIDE_STACK_CRAWLS = true; @@ -4996,6 +4997,14 @@ public class WindowManagerService extends IWindowManager.Stub dh = tmp; rot = (rot == Surface.ROTATION_90) ? Surface.ROTATION_270 : Surface.ROTATION_90; } + if (DEBUG_SCREENSHOT) { + Slog.i(TAG, "Screenshot: " + dw + "x" + dh + " from 0 to " + maxLayer); + for (int i=0; i