summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunny Goyal <sunnygoyal@google.com>2018-05-09 15:39:23 -0700
committerSunny Goyal <sunnygoyal@google.com>2018-05-09 15:41:57 -0700
commit425520d9c58d930525880345c1aaa1fbeb90c9e9 (patch)
treedbd120daacdb1314eb9f35e928a7b6f1e1c14ed3
parent1822926cfbf55cc68a85cdfd588802f4a106cdb5 (diff)
Desaturating the icon disabled on app widgets for a suspended app
Bug: 76454418 Test: Verified preview for a disabled widget on device Change-Id: Ie5903c547bbb642c2fe72ddcb2a50e428f6832be
-rw-r--r--services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java3
-rw-r--r--services/core/java/com/android/server/policy/IconUtilities.java91
2 files changed, 28 insertions, 66 deletions
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 85b02206a594..f992049ef1fb 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -568,8 +568,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
Context userContext = mContext.createPackageContextAsUser(providerPackage, 0,
UserHandle.of(providerUserId));
PackageManager pm = userContext.getPackageManager();
- Drawable icon = pm.getApplicationInfo(providerPackage, 0).loadUnbadgedIcon(pm);
+ Drawable icon = pm.getApplicationInfo(providerPackage, 0).loadUnbadgedIcon(pm).mutate();
// Create a bitmap of the icon which is what the widget's remoteview requires.
+ icon.setColorFilter(mIconUtilities.getDisabledColorFilter());
return mIconUtilities.createIconBitmap(icon);
} catch (NameNotFoundException e) {
Slog.e(TAG, "Fail to get application icon", e);
diff --git a/services/core/java/com/android/server/policy/IconUtilities.java b/services/core/java/com/android/server/policy/IconUtilities.java
index b196dec93686..884d7d497a8f 100644
--- a/services/core/java/com/android/server/policy/IconUtilities.java
+++ b/services/core/java/com/android/server/policy/IconUtilities.java
@@ -16,6 +16,8 @@
package com.android.server.policy;
+import android.graphics.ColorFilter;
+import android.graphics.ColorMatrixColorFilter;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.PaintDrawable;
@@ -38,24 +40,17 @@ import android.content.Context;
* Various utilities shared amongst the Launcher's classes.
*/
public final class IconUtilities {
- private static final String TAG = "IconUtilities";
-
- private static final int sColors[] = { 0xffff0000, 0xff00ff00, 0xff0000ff };
private int mIconWidth = -1;
private int mIconHeight = -1;
private int mIconTextureWidth = -1;
private int mIconTextureHeight = -1;
- private final Paint mPaint = new Paint();
- private final Paint mBlurPaint = new Paint();
- private final Paint mGlowColorPressedPaint = new Paint();
- private final Paint mGlowColorFocusedPaint = new Paint();
private final Rect mOldBounds = new Rect();
private final Canvas mCanvas = new Canvas();
private final DisplayMetrics mDisplayMetrics;
- private int mColorIndex = 0;
+ private ColorFilter mDisabledColorFilter;
public IconUtilities(Context context) {
final Resources resources = context.getResources();
@@ -65,39 +60,10 @@ public final class IconUtilities {
mIconWidth = mIconHeight = (int) resources.getDimension(android.R.dimen.app_icon_size);
mIconTextureWidth = mIconTextureHeight = mIconWidth + (int)(blurPx*2);
-
- mBlurPaint.setMaskFilter(new BlurMaskFilter(blurPx, BlurMaskFilter.Blur.NORMAL));
-
- TypedValue value = new TypedValue();
- mGlowColorPressedPaint.setColor(context.getTheme().resolveAttribute(
- android.R.attr.colorPressedHighlight, value, true) ? value.data : 0xffffc300);
- mGlowColorPressedPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30));
- mGlowColorFocusedPaint.setColor(context.getTheme().resolveAttribute(
- android.R.attr.colorFocusedHighlight, value, true) ? value.data : 0xffff8e00);
- mGlowColorFocusedPaint.setMaskFilter(TableMaskFilter.CreateClipTable(0, 30));
-
- ColorMatrix cm = new ColorMatrix();
- cm.setSaturation(0.2f);
-
mCanvas.setDrawFilter(new PaintFlagsDrawFilter(Paint.DITHER_FLAG,
Paint.FILTER_BITMAP_FLAG));
}
- public Drawable createIconDrawable(Drawable src) {
- Bitmap scaled = createIconBitmap(src);
-
- StateListDrawable result = new StateListDrawable();
-
- result.addState(new int[] { android.R.attr.state_focused },
- new BitmapDrawable(createSelectedBitmap(scaled, false)));
- result.addState(new int[] { android.R.attr.state_pressed },
- new BitmapDrawable(createSelectedBitmap(scaled, true)));
- result.addState(new int[0], new BitmapDrawable(scaled));
-
- result.setBounds(0, 0, mIconTextureWidth, mIconTextureHeight);
- return result;
- }
-
/**
* Returns a bitmap suitable for the all apps view. The bitmap will be a power
* of two sized ARGB_8888 bitmap that can be used as a gl texture.
@@ -150,15 +116,6 @@ public final class IconUtilities {
final int left = (textureWidth-width) / 2;
final int top = (textureHeight-height) / 2;
- if (false) {
- // draw a big box for the icon for debugging
- canvas.drawColor(sColors[mColorIndex]);
- if (++mColorIndex >= sColors.length) mColorIndex = 0;
- Paint debugPaint = new Paint();
- debugPaint.setColor(0xffcccc00);
- canvas.drawRect(left, top, left+width, top+height, debugPaint);
- }
-
mOldBounds.set(icon.getBounds());
icon.setBounds(left, top, left+width, top+height);
icon.draw(canvas);
@@ -167,24 +124,28 @@ public final class IconUtilities {
return bitmap;
}
- private Bitmap createSelectedBitmap(Bitmap src, boolean pressed) {
- final Bitmap result = Bitmap.createBitmap(mIconTextureWidth, mIconTextureHeight,
- Bitmap.Config.ARGB_8888);
- final Canvas dest = new Canvas(result);
-
- dest.drawColor(0, PorterDuff.Mode.CLEAR);
-
- int[] xy = new int[2];
- Bitmap mask = src.extractAlpha(mBlurPaint, xy);
-
- dest.drawBitmap(mask, xy[0], xy[1],
- pressed ? mGlowColorPressedPaint : mGlowColorFocusedPaint);
-
- mask.recycle();
-
- dest.drawBitmap(src, 0, 0, mPaint);
- dest.setBitmap(null);
-
- return result;
+ public ColorFilter getDisabledColorFilter() {
+ if (mDisabledColorFilter != null) {
+ return mDisabledColorFilter;
+ }
+ ColorMatrix brightnessMatrix = new ColorMatrix();
+ float brightnessF = 0.5f;
+ int brightnessI = (int) (255 * brightnessF);
+ // Brightness: C-new = C-old*(1-amount) + amount
+ float scale = 1f - brightnessF;
+ float[] mat = brightnessMatrix.getArray();
+ mat[0] = scale;
+ mat[6] = scale;
+ mat[12] = scale;
+ mat[4] = brightnessI;
+ mat[9] = brightnessI;
+ mat[14] = brightnessI;
+
+ ColorMatrix filterMatrix = new ColorMatrix();
+ filterMatrix.setSaturation(0);
+ filterMatrix.preConcat(brightnessMatrix);
+
+ mDisabledColorFilter = new ColorMatrixColorFilter(filterMatrix);
+ return mDisabledColorFilter;
}
}