summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/am/ActivityStack.java20
1 files changed, 18 insertions, 2 deletions
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index b007bc8bdbe2..0e01e4cb2a74 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -45,6 +45,7 @@ import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
@@ -280,6 +281,13 @@ final class ActivityStack {
*/
boolean mDismissKeyguardOnNextActivity = false;
+ /**
+ * Save the most recent screenshot for reuse. This keeps Recents from taking two identical
+ * screenshots, one for the Recents thumbnail and one for the pauseActivity thumbnail.
+ */
+ private ActivityRecord mLastScreenshotActivity = null;
+ private Bitmap mLastScreenshotBitmap = null;
+
int mThumbnailWidth = -1;
int mThumbnailHeight = -1;
@@ -931,8 +939,16 @@ final class ActivityStack {
}
if (w > 0) {
- return mService.mWindowManager.screenshotApplications(who.appToken,
- Display.DEFAULT_DISPLAY, w, h);
+ if (who != mLastScreenshotActivity || mLastScreenshotBitmap == null
+ || mLastScreenshotBitmap.getWidth() != w
+ || mLastScreenshotBitmap.getHeight() != h) {
+ mLastScreenshotActivity = who;
+ mLastScreenshotBitmap = mService.mWindowManager.screenshotApplications(
+ who.appToken, Display.DEFAULT_DISPLAY, w, h);
+ }
+ if (mLastScreenshotBitmap != null) {
+ return mLastScreenshotBitmap.copy(Config.ARGB_8888, true);
+ }
}
return null;
}