[Expressive design] Update homepage injection icons

Bug: 396944193
Test: visual, robotest
Flag: com.android.settingslib.widget.theme.flags.is_expressive_design_enabled
Change-Id: I58274fb39b01f9c79abfb2e1e60925edacfa6573
This commit is contained in:
Jason Chiu
2025-02-27 19:09:05 +08:00
parent 98a039e8d3
commit b84b300523

View File

@@ -42,6 +42,7 @@ import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.UserHandle;
@@ -77,6 +78,7 @@ import com.android.settingslib.drawer.Tile;
import com.android.settingslib.drawer.TileUtils;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.AdaptiveIcon;
import com.android.settingslib.widget.SettingsThemeHelper;
import com.google.common.collect.Iterables;
@@ -92,6 +94,7 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
private static final String TAG = "DashboardFeatureImpl";
private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_";
private static final String META_DATA_KEY_INTENT_ACTION = "com.android.settings.intent.action";
private static final String TOP_LEVEL_ACCOUNT_CATEGORY = "top_level_account_category";
protected final Context mContext;
@@ -454,13 +457,19 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
preference.setIcon(null);
return;
}
// Tint homepage icons
// Handle homepage icons
if (TextUtils.equals(tile.getCategory(), CategoryKey.CATEGORY_HOMEPAGE)) {
// Skip tinting and Adaptive Icon transformation for homepage account type raw icons
if (TextUtils.equals(tile.getGroupKey(), "top_level_account_category")
&& iconPackage == null) {
preference.setIcon(iconDrawable);
return;
if (Flags.homepageRevamp()) {
if (SettingsThemeHelper.isExpressiveTheme(mContext)) {
preference.setIcon(getExpressiveHomepageIcon(tile, iconDrawable, iconPackage));
return;
}
// Skip tinting and Adaptive Icon transformation for homepage account type raw icons
if (TextUtils.equals(tile.getGroupKey(), TOP_LEVEL_ACCOUNT_CATEGORY)
&& iconPackage == null) {
preference.setIcon(iconDrawable);
return;
}
}
iconDrawable.setTint(Utils.getHomepageIconColor(preference.getContext()));
}
@@ -473,6 +482,34 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
preference.setIcon(iconDrawable);
}
private Drawable getExpressiveHomepageIcon(Tile tile, Drawable iconDrawable,
@Nullable String iconPackage) {
if (TextUtils.equals(tile.getGroupKey(), TOP_LEVEL_ACCOUNT_CATEGORY)
&& iconPackage == null) {
// Normalize size for homepage account type raw icons
LayerDrawable drawable = new LayerDrawable(new Drawable[] {iconDrawable});
int size = mContext.getResources().getDimensionPixelSize(
R.dimen.dashboard_tile_image_size);
drawable.setLayerSize(0, size, size);
return drawable;
} else if (TextUtils.equals(tile.getPackageName(),
mPackageManager.getWellbeingPackageName())) {
return getRoundedIcon(iconDrawable,
R.color.homepage_wellbeing_foreground, R.color.homepage_wellbeing_background);
}
// For future injections, please add the package name and color resources here.
iconDrawable.setTint(Utils.getHomepageIconColor(mContext));
return iconDrawable;
}
private Drawable getRoundedIcon(Drawable iconDrawable, int fgColorId, int bgColorId) {
iconDrawable.setTint(mContext.getColor(fgColorId));
AdaptiveIcon roundedIcon = new AdaptiveIcon(mContext, iconDrawable);
roundedIcon.setBackgroundColor(mContext.getColor(bgColorId));
return roundedIcon;
}
private void launchPendingIntentOrSelectProfile(FragmentActivity activity, Tile tile,
int sourceMetricCategory) {
ProfileSelectDialog.updatePendingIntentsIfNeeded(mContext, tile);