From 51f42d298323849526a9ccf500be8d19183aebe1 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Thu, 1 Feb 2018 14:59:38 -0800 Subject: [PATCH] Enforce an opaque background color when drawing secure window snapshots. Bug: 72814691 Test: Launch Chrome (65+) incognito window, enter recents and verify that a snapshot exists Change-Id: I99444f68f6ddc28847e3326d5f5e80609506696b --- .../java/com/android/server/wm/TaskSnapshotController.java | 5 ++++- .../core/java/com/android/server/wm/TaskSnapshotSurface.java | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskSnapshotController.java b/services/core/java/com/android/server/wm/TaskSnapshotController.java index 212a0d70927af..a7a2b534131d6 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotController.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotController.java @@ -27,6 +27,7 @@ import android.app.ActivityManager; import android.app.ActivityManager.TaskSnapshot; import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.GraphicBuffer; import android.graphics.Rect; import android.os.Environment; @@ -40,6 +41,7 @@ import android.view.ThreadedRenderer; import android.view.WindowManager.LayoutParams; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.graphics.ColorUtils; import com.android.server.policy.WindowManagerPolicy.ScreenOffListener; import com.android.server.policy.WindowManagerPolicy.StartingSurface; import com.android.server.wm.TaskSnapshotSurface.SystemBarBackgroundPainter; @@ -324,7 +326,8 @@ class TaskSnapshotController { if (mainWindow == null) { return null; } - final int color = task.getTaskDescription().getBackgroundColor(); + final int color = ColorUtils.setAlphaComponent( + task.getTaskDescription().getBackgroundColor(), 255); final int statusBarColor = task.getTaskDescription().getStatusBarColor(); final int navigationBarColor = task.getTaskDescription().getNavigationBarColor(); final LayoutParams attrs = mainWindow.getAttrs(); diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java index 259f8df15e315..e4db3b075e916 100644 --- a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java +++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java @@ -47,6 +47,7 @@ import android.app.ActivityManager.TaskSnapshot; import android.app.ActivityThread; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.GraphicBuffer; import android.graphics.Paint; import android.graphics.Rect; @@ -516,7 +517,7 @@ class TaskSnapshotSurface implements StartingSurface { @VisibleForTesting void drawStatusBarBackground(Canvas c, @Nullable Rect alreadyDrawnFrame, int statusBarHeight) { - if (statusBarHeight > 0 + if (statusBarHeight > 0 && Color.alpha(mStatusBarColor) != 0 && (alreadyDrawnFrame == null || c.getWidth() > alreadyDrawnFrame.right)) { final int rightInset = DecorView.getColorViewRightInset(mStableInsets.right, mContentInsets.right); @@ -531,7 +532,7 @@ class TaskSnapshotSurface implements StartingSurface { getNavigationBarRect(c.getWidth(), c.getHeight(), mStableInsets, mContentInsets, navigationBarRect); final boolean visible = isNavigationBarColorViewVisible(); - if (visible && !navigationBarRect.isEmpty()) { + if (visible && Color.alpha(mNavigationBarColor) != 0 && !navigationBarRect.isEmpty()) { c.drawRect(navigationBarRect, mNavigationBarPaint); } }