Updating icon badging logic

Bug: 201682172
Test: Manual
Change-Id: Id19f1bdabbfa0c203052f63245f0f4ede462429a
This commit is contained in:
Sunny Goyal
2021-11-24 18:11:40 -08:00
parent e46f056db5
commit 732fb425c5
6 changed files with 25 additions and 35 deletions

View File

@@ -95,9 +95,8 @@ class BubbleOverflow(
// Update bitmap
val fg = InsetDrawable(overflowBtn?.drawable, overflowIconInset)
bitmap = iconFactory.createBadgedIconBitmap(AdaptiveIconDrawable(
ColorDrawable(colorAccent), fg),
null /* user */, true /* shrinkNonAdaptiveIcons */).icon
bitmap = iconFactory.createBadgedIconBitmap(
AdaptiveIconDrawable(ColorDrawable(colorAccent), fg)).icon
// Update dot path
dotPath = PathParser.createPathFromPathData(

View File

@@ -189,9 +189,7 @@ public class BubbleViewInfoTask extends AsyncTask<Void, Void, BubbleViewInfoTask
BitmapInfo badgeBitmapInfo = iconFactory.getBadgeBitmap(badgedIcon,
b.isImportantConversation());
info.badgeBitmap = badgeBitmapInfo.icon;
info.bubbleBitmap = iconFactory.createBadgedIconBitmap(bubbleDrawable,
null /* user */,
true /* shrinkNonAdaptiveIcons */).icon;
info.bubbleBitmap = iconFactory.createBadgedIconBitmap(bubbleDrawable).icon;
// Dot color & placement
Path iconPath = PathParser.createPathFromPathData(

View File

@@ -390,8 +390,7 @@ public class SplashscreenContentDrawer {
final ShapeIconFactory factory = new ShapeIconFactory(
SplashscreenContentDrawer.this.mContext,
scaledIconDpi, mFinalIconSize);
final Bitmap bitmap = factory.createScaledBitmapWithoutShadow(
iconDrawable, true /* shrinkNonAdaptiveIcons */);
final Bitmap bitmap = factory.createScaledBitmapWithoutShadow(iconDrawable);
Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
createIconDrawable(new BitmapDrawable(bitmap), true);
}

View File

@@ -19,7 +19,6 @@ import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.location.LocationManager;
import android.media.AudioManager;
@@ -44,6 +43,7 @@ import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.UserIcons;
import com.android.launcher3.icons.BaseIconFactory.IconOptions;
import com.android.launcher3.icons.IconFactory;
import com.android.settingslib.drawable.UserIconDrawable;
import com.android.settingslib.fuelgauge.BatteryStatus;
@@ -525,9 +525,9 @@ public class Utils {
/** Get the corresponding adaptive icon drawable. */
public static Drawable getBadgedIcon(Context context, Drawable icon, UserHandle user) {
try (IconFactory iconFactory = IconFactory.obtain(context)) {
final Bitmap iconBmp = iconFactory.createBadgedIconBitmap(icon, user,
true /* shrinkNonAdaptiveIcons */).icon;
return new BitmapDrawable(context.getResources(), iconBmp);
return iconFactory
.createBadgedIconBitmap(icon, new IconOptions().setUser(user))
.newIcon(context);
}
}

View File

@@ -33,6 +33,7 @@ import static android.appwidget.AppWidgetManager.OPTION_APPWIDGET_SIZES;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
import static android.util.TypedValue.COMPLEX_UNIT_PX;
import static com.android.launcher3.icons.FastBitmapDrawable.getDisabledColorFilter;
import static com.android.systemui.people.PeopleSpaceUtils.STARRED_CONTACT;
import static com.android.systemui.people.PeopleSpaceUtils.VALID_CONTACT;
import static com.android.systemui.people.PeopleSpaceUtils.convertDrawableToBitmap;
@@ -45,8 +46,6 @@ import android.app.people.PeopleSpaceTile;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.ImageDecoder;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
@@ -75,7 +74,6 @@ import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
import androidx.core.math.MathUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.launcher3.icons.FastBitmapDrawable;
import com.android.systemui.R;
import com.android.systemui.people.widget.LaunchConversationActivity;
import com.android.systemui.people.widget.PeopleSpaceWidgetProvider;
@@ -339,8 +337,9 @@ public class PeopleTileViewHelper {
views = new RemoteViews(mContext.getPackageName(),
R.layout.people_tile_suppressed_layout);
}
Drawable appIcon = mContext.getDrawable(R.drawable.ic_conversation_icon);
Bitmap disabledBitmap = convertDrawableToDisabledBitmap(appIcon);
Drawable appIcon = mContext.getDrawable(R.drawable.ic_conversation_icon).mutate();
appIcon.setColorFilter(getDisabledColorFilter());
Bitmap disabledBitmap = convertDrawableToBitmap(appIcon);
views.setImageViewBitmap(R.id.icon, disabledBitmap);
return views;
}
@@ -1262,8 +1261,9 @@ public class PeopleTileViewHelper {
Context context, PeopleSpaceTile tile, int maxAvatarSize, boolean hasNewStory) {
Icon icon = tile.getUserIcon();
if (icon == null) {
Drawable placeholder = context.getDrawable(R.drawable.ic_avatar_with_badge);
return convertDrawableToDisabledBitmap(placeholder);
Drawable placeholder = context.getDrawable(R.drawable.ic_avatar_with_badge).mutate();
placeholder.setColorFilter(getDisabledColorFilter());
return convertDrawableToBitmap(placeholder);
}
PeopleStoryIconFactory storyIcon = new PeopleStoryIconFactory(context,
context.getPackageManager(),
@@ -1276,10 +1276,7 @@ public class PeopleTileViewHelper {
hasNewStory);
if (isDndBlockingTileData(tile)) {
// If DND is blocking the conversation, then display the icon in grayscale.
ColorMatrix colorMatrix = new ColorMatrix();
colorMatrix.setSaturation(0);
personDrawable.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
personDrawable.setColorFilter(getDisabledColorFilter());
}
return convertDrawableToBitmap(personDrawable);
@@ -1375,11 +1372,4 @@ public class PeopleTileViewHelper {
mAvatarSize = avatarSize;
}
}
private static Bitmap convertDrawableToDisabledBitmap(Drawable icon) {
Bitmap appIconAsBitmap = convertDrawableToBitmap(icon);
FastBitmapDrawable drawable = new FastBitmapDrawable(appIconAsBitmap);
drawable.setIsDisabled(true);
return convertDrawableToBitmap(drawable);
}
}

View File

@@ -30,8 +30,6 @@ import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.UserHandle;
@@ -42,6 +40,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.android.internal.R;
import com.android.launcher3.icons.BaseIconFactory.IconOptions;
import com.android.launcher3.icons.IconFactory;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
@@ -280,9 +279,14 @@ public class SystemUIToast implements ToastPlugin.Toast {
final ApplicationInfo appInfo = appEntry.info;
UserHandle user = UserHandle.getUserHandleForUid(appInfo.uid);
IconFactory iconFactory = IconFactory.obtain(context);
Bitmap iconBmp = iconFactory.createBadgedIconBitmap(
appInfo.loadUnbadgedIcon(packageManager), user, true).icon;
return new BitmapDrawable(context.getResources(), iconBmp);
try {
return iconFactory.createBadgedIconBitmap(
appInfo.loadUnbadgedIcon(packageManager),
new IconOptions().setUser(user))
.newIcon(context);
} finally {
iconFactory.recycle();
}
}
private static boolean showApplicationIcon(ApplicationInfo appInfo,