Merge "Moving IconProvider extensions to a separate subclass instead of routing via APIWrapper" into main

This commit is contained in:
Sunny Goyal
2025-04-08 09:46:28 -07:00
committed by Android (Google) Code Review
6 changed files with 189 additions and 58 deletions
@@ -16,25 +16,17 @@
package com.android.launcher3.icons;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.launcher3.R;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.dagger.ApplicationContext;
import com.android.launcher3.dagger.LauncherAppSingleton;
import com.android.launcher3.graphics.ShapeDelegate;
import com.android.launcher3.graphics.ThemeManager;
import com.android.launcher3.util.ApiWrapper;
import org.xmlpull.v1.XmlPullParser;
@@ -58,17 +50,14 @@ public class LauncherIconProvider extends IconProvider {
private Map<String, ThemeData> mThemedIconMap;
private final ApiWrapper mApiWrapper;
private final ThemeManager mThemeManager;
protected final ThemeManager mThemeManager;
@Inject
public LauncherIconProvider(
@ApplicationContext Context context,
ThemeManager themeManager,
ApiWrapper apiWrapper) {
ThemeManager themeManager) {
super(context);
mThemeManager = themeManager;
mApiWrapper = apiWrapper;
mThemedIconMap = FeatureFlags.USE_LOCAL_ICON_OVERRIDES.get() ? null : DISABLED_MAP;
}
@@ -83,29 +72,6 @@ public class LauncherIconProvider extends IconProvider {
mSystemState += "," + mThemeManager.getIconState().toUniqueId();
}
@Override
protected String getApplicationInfoHash(@NonNull ApplicationInfo appInfo) {
return mApiWrapper.getApplicationInfoHash(appInfo);
}
@Nullable
@Override
protected Drawable loadAppInfoIcon(ApplicationInfo info, Resources resources, int density) {
// Tries to load the round icon res, if the app defines it as an adaptive icon
if (mThemeManager.getIconShape() instanceof ShapeDelegate.Circle) {
int roundIconRes = mApiWrapper.getRoundIconRes(info);
if (roundIconRes != 0 && roundIconRes != info.icon) {
try {
Drawable d = resources.getDrawableForDensity(roundIconRes, density);
if (d instanceof AdaptiveIconDrawable) {
return d;
}
} catch (Resources.NotFoundException exc) { }
}
}
return super.loadAppInfoIcon(info, resources, density);
}
private Map<String, ThemeData> getThemedIconMap() {
if (mThemedIconMap != null) {
return mThemedIconMap;
@@ -23,7 +23,6 @@ import android.app.Person;
import android.app.role.RoleManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.LauncherActivityInfo;
import android.content.pm.ShortcutInfo;
import android.graphics.drawable.ColorDrawable;
@@ -201,21 +200,6 @@ public class ApiWrapper {
}
}
/**
* Returns a hash to uniquely identify a particular version of appInfo
*/
public String getApplicationInfoHash(@NonNull ApplicationInfo appInfo) {
// The hashString in source dir changes with every install
return appInfo.sourceDir;
}
/**
* Returns the round icon resource Id if defined by the app
*/
public int getRoundIconRes(@NonNull ApplicationInfo appInfo) {
return 0;
}
/**
* Checks if the shortcut is using an icon with file or URI source
*/