Show icons for allowed contacts
Test: atest com.android.settings.notification.modes Bug: 346551087 Flag: android.app.modes_ui Change-Id: If2b6b06b4a9c16bdefb03850ad1615e96c601fbd
This commit is contained in:
@@ -20,6 +20,13 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Typeface;
|
||||
import android.graphics.drawable.BitmapDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.graphics.drawable.ShapeDrawable;
|
||||
@@ -29,11 +36,16 @@ import android.view.Gravity;
|
||||
import androidx.annotation.AttrRes;
|
||||
import androidx.annotation.DrawableRes;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.Px;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settingslib.Utils;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
class IconUtil {
|
||||
|
||||
static Drawable applyNormalTint(@NonNull Context context, @NonNull Drawable icon) {
|
||||
@@ -87,9 +99,10 @@ class IconUtil {
|
||||
/**
|
||||
* Returns a variant of the supplied icon to be used in a {@link CircularIconsPreference}. The
|
||||
* inner icon is 20x20 dp and it's contained in a circle of diameter 32dp, and is tinted
|
||||
* with the "material secondary container" color combination.
|
||||
* with the "material secondary" color combination.
|
||||
*/
|
||||
static Drawable makeSoundIcon(@NonNull Context context, @DrawableRes int iconResId) {
|
||||
static Drawable makeCircularIconPreferenceItem(@NonNull Context context,
|
||||
@DrawableRes int iconResId) {
|
||||
return composeIconCircle(
|
||||
Utils.getColorAttr(context,
|
||||
com.android.internal.R.attr.materialColorSecondaryContainer),
|
||||
@@ -102,6 +115,53 @@ class IconUtil {
|
||||
R.dimen.zen_mode_circular_icon_inner_icon_size));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an icon representing a contact that doesn't have an associated photo, to be used in
|
||||
* a {@link CircularIconsPreference}, tinted with the "material tertiary". If the contact's
|
||||
* display name is not empty, it's the contact's monogram, otherwise it's a generic icon.
|
||||
*/
|
||||
static Drawable makeContactMonogram(@NonNull Context context, @Nullable String displayName) {
|
||||
Resources res = context.getResources();
|
||||
if (Strings.isNullOrEmpty(displayName)) {
|
||||
return composeIconCircle(
|
||||
Utils.getColorAttr(context,
|
||||
com.android.internal.R.attr.materialColorTertiaryContainer),
|
||||
res.getDimensionPixelSize(R.dimen.zen_mode_circular_icon_diameter),
|
||||
checkNotNull(context.getDrawable(R.drawable.ic_zen_mode_generic_contact)),
|
||||
Utils.getColorAttr(context,
|
||||
com.android.internal.R.attr.materialColorOnTertiaryContainer),
|
||||
res.getDimensionPixelSize(R.dimen.zen_mode_circular_icon_inner_icon_size));
|
||||
}
|
||||
|
||||
float diameter = res.getDimensionPixelSize(R.dimen.zen_mode_circular_icon_diameter);
|
||||
Bitmap bitmap = Bitmap.createBitmap((int) diameter, (int) diameter,
|
||||
Bitmap.Config.ARGB_8888);
|
||||
Canvas canvas = new Canvas(bitmap);
|
||||
|
||||
Paint circlePaint = new Paint();
|
||||
circlePaint.setColor(Utils.getColorAttrDefaultColor(context,
|
||||
com.android.internal.R.attr.materialColorTertiaryContainer));
|
||||
circlePaint.setFlags(Paint.ANTI_ALIAS_FLAG);
|
||||
canvas.drawCircle(diameter / 2f, diameter / 2f, diameter / 2f, circlePaint);
|
||||
|
||||
Paint textPaint = new Paint();
|
||||
textPaint.setColor(Utils.getColorAttrDefaultColor(context,
|
||||
com.android.internal.R.attr.materialColorOnTertiaryContainer));
|
||||
textPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
|
||||
textPaint.setTextAlign(Paint.Align.LEFT);
|
||||
textPaint.setTextSize(res.getDimensionPixelSize(R.dimen.zen_mode_circular_icon_text_size));
|
||||
|
||||
String text = displayName.substring(0, 1).toUpperCase(Locale.getDefault());
|
||||
Rect textRect = new Rect();
|
||||
textPaint.getTextBounds(text, 0, text.length(), textRect);
|
||||
|
||||
float textX = diameter / 2f - textRect.width() / 2f - textRect.left;
|
||||
float textY = diameter / 2f + textRect.height() / 2f - textRect.bottom;
|
||||
canvas.drawText(text, textX, textY, textPaint);
|
||||
|
||||
return new BitmapDrawable(context.getResources(), bitmap);
|
||||
}
|
||||
|
||||
private static Drawable composeIconCircle(ColorStateList circleColor, @Px int circleDiameterPx,
|
||||
Drawable icon, ColorStateList iconColor, @Px int iconSizePx) {
|
||||
ShapeDrawable background = new ShapeDrawable(new OvalShape());
|
||||
|
||||
Reference in New Issue
Block a user