summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorim Jaggi <jjaggi@google.com> 2016-05-31 22:50:08 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-05-31 22:50:09 +0000
commita35724f6667e80abc5e6b45e75d7000d3fb17267 (patch)
treef9d74000ece5d7c1950be32085dda8a720394ef4
parent760b5571582056e756d9fb1bc366247bc26a8e54 (diff)
parent8e879f1fec1ca6c641f270b58447033ab4671851 (diff)
Merge "Enforce background fallback to be non-translucent" into nyc-dev
-rw-r--r--core/java/com/android/internal/policy/DecorView.java40
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java7
-rw-r--r--core/res/res/values/themes.xml1
3 files changed, 39 insertions, 9 deletions
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index f5966362fdb2..a0652197d7b4 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -45,6 +45,7 @@ import android.graphics.PixelFormat;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Shader;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.util.DisplayMetrics;
@@ -907,10 +908,12 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
if (getBackground() != drawable) {
setBackgroundDrawable(drawable);
if (drawable != null) {
- mResizingBackgroundDrawable = drawable;
+ mResizingBackgroundDrawable = enforceNonTranslucentBackground(drawable,
+ mWindow.isTranslucent() || mWindow.isShowingWallpaper());
} else {
mResizingBackgroundDrawable = getResizingBackgroundDrawable(
- getContext(), 0, mWindow.mBackgroundFallbackResource);
+ getContext(), 0, mWindow.mBackgroundFallbackResource,
+ mWindow.isTranslucent() || mWindow.isShowingWallpaper());
}
if (mResizingBackgroundDrawable != null) {
mResizingBackgroundDrawable.getPadding(mBackgroundPadding);
@@ -1785,7 +1788,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
private void loadBackgroundDrawablesIfNeeded() {
if (mResizingBackgroundDrawable == null) {
mResizingBackgroundDrawable = getResizingBackgroundDrawable(getContext(),
- mWindow.mBackgroundResource, mWindow.mBackgroundFallbackResource);
+ mWindow.mBackgroundResource, mWindow.mBackgroundFallbackResource,
+ mWindow.isTranslucent() || mWindow.isShowingWallpaper());
if (mResizingBackgroundDrawable == null) {
// We shouldn't really get here as the background fallback should be always
// available since it is defaulted by the system.
@@ -1893,21 +1897,41 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
* user is resizing the window of an activity in multi-window mode.
*/
public static Drawable getResizingBackgroundDrawable(Context context, int backgroundRes,
- int backgroundFallbackRes) {
+ int backgroundFallbackRes, boolean windowTranslucent) {
if (backgroundRes != 0) {
final Drawable drawable = context.getDrawable(backgroundRes);
if (drawable != null) {
- return drawable;
+ return enforceNonTranslucentBackground(drawable, windowTranslucent);
}
}
if (backgroundFallbackRes != 0) {
final Drawable fallbackDrawable = context.getDrawable(backgroundFallbackRes);
if (fallbackDrawable != null) {
- return fallbackDrawable;
+ return enforceNonTranslucentBackground(fallbackDrawable, windowTranslucent);
}
}
- return null;
+ return new ColorDrawable(Color.BLACK);
+ }
+
+ /**
+ * Enforces a drawable to be non-translucent to act as a background if needed, i.e. if the
+ * window is not translucent.
+ */
+ private static Drawable enforceNonTranslucentBackground(Drawable drawable,
+ boolean windowTranslucent) {
+ if (!windowTranslucent && drawable instanceof ColorDrawable) {
+ ColorDrawable colorDrawable = (ColorDrawable) drawable;
+ int color = colorDrawable.getColor();
+ if (Color.alpha(color) != 255) {
+ ColorDrawable copy = (ColorDrawable) colorDrawable.getConstantState().newDrawable()
+ .mutate();
+ copy.setColor(
+ Color.argb(255, Color.red(color), Color.green(color), Color.blue(color)));
+ return copy;
+ }
+ }
+ return drawable;
}
/**
@@ -2037,7 +2061,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
private void drawResizingShadowIfNeeded(DisplayListCanvas canvas) {
if (mResizeMode != RESIZE_MODE_DOCKED_DIVIDER || mWindow.mIsFloating
|| mWindow.isTranslucent()
- || (mWindow.getAttributes().flags & FLAG_SHOW_WALLPAPER) != 0) {
+ || mWindow.isShowingWallpaper()) {
return;
}
canvas.save();
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 4f15ece8e04e..9ad750d3a599 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -509,6 +509,13 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
/**
+ * @return Whether the window is currently showing the wallpaper.
+ */
+ boolean isShowingWallpaper() {
+ return (getAttributes().flags & FLAG_SHOW_WALLPAPER) != 0;
+ }
+
+ /**
* Return a LayoutInflater instance that can be used to inflate XML view layout
* resources for use in this Window.
*
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index 998eea5ac9ab..aecda44a6583 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -174,7 +174,6 @@ please see themes_device_defaults.xml.
<!-- Window attributes -->
<item name="windowBackground">@drawable/screen_background_selector_dark</item>
- <item name="windowBackgroundFallback">?attr/colorBackground</item>
<item name="windowClipToOutline">false</item>
<item name="windowFrame">@null</item>
<item name="windowNoTitle">false</item>