diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2020-01-17 10:05:50 -0800 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2020-01-21 16:17:49 -0800 |
commit | 77a2416924c1a58945bd29c272efa336ee1274f7 (patch) | |
tree | fb15934ca567523b6e38ce4fcd973fa70de5b8b0 | |
parent | d26218b6d7ffb01b177642c1463ef77cd588f4ef (diff) |
Adding API to check if an icon returned by PackageManager
is a fallback icon
Bug: 141588119
Test: atest PackageManagerTest
Change-Id: I9ae5a74dd0b0c0c49a078d46914986ecb0d27a94
-rw-r--r-- | api/current.txt | 1 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 16 | ||||
-rw-r--r-- | graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java | 15 |
3 files changed, 32 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index d5ece2e7301c..6d0c51030175 100644 --- a/api/current.txt +++ b/api/current.txt @@ -11842,6 +11842,7 @@ package android.content.pm { method public boolean hasSigningCertificate(int, @NonNull byte[], int); method public abstract boolean hasSystemFeature(@NonNull String); method public abstract boolean hasSystemFeature(@NonNull String, int); + method public boolean isDefaultApplicationIcon(@NonNull android.graphics.drawable.Drawable); method public boolean isDeviceUpgrading(); method public abstract boolean isInstantApp(); method public abstract boolean isInstantApp(@NonNull String); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 1f502a101290..05e42bf0b2c0 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -50,6 +50,7 @@ import android.content.pm.dex.ArtManager; import android.content.res.Resources; import android.content.res.XmlResourceParser; import android.graphics.Rect; +import android.graphics.drawable.AdaptiveIconDrawable; import android.graphics.drawable.Drawable; import android.net.wifi.WifiManager; import android.os.Build; @@ -7619,4 +7620,19 @@ public abstract class PackageManager { "sendDeviceCustomizationReadyBroadcast not implemented in subclass"); } + /** + * Returns if the provided drawable represents the default activity icon provided by the system. + * + * PackageManager provides a default icon for any package/activity if the app itself does not + * define one or if the system encountered any error when loading the icon. + * + * @return true if the drawable represents the default activity icon, false otherwise + * @see #getDefaultActivityIcon() + */ + public boolean isDefaultApplicationIcon(@NonNull Drawable drawable) { + int resId = drawable instanceof AdaptiveIconDrawable + ? ((AdaptiveIconDrawable) drawable).getSourceDrawableResId() : Resources.ID_NULL; + return resId == com.android.internal.R.drawable.sym_def_app_icon + || resId == com.android.internal.R.drawable.sym_app_on_sd_unavailable_icon; + } } diff --git a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java index fab96a1e9fbd..928e607abbbe 100644 --- a/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java +++ b/graphics/java/android/graphics/drawable/AdaptiveIconDrawable.java @@ -16,6 +16,7 @@ package android.graphics.drawable; +import android.annotation.DrawableRes; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; @@ -223,6 +224,7 @@ public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback final int deviceDensity = Drawable.resolveDensity(r, 0); state.setDensity(deviceDensity); state.mSrcDensityOverride = mSrcDensityOverride; + state.mSourceDrawableId = Resources.getAttributeSetSourceResId(attrs); final ChildDrawable[] array = state.mChildren; for (int i = 0; i < state.mChildren.length; i++) { @@ -446,6 +448,17 @@ public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback } /** + * If the drawable was inflated from XML, this returns the resource ID for the drawable + * + * @hide + */ + @DrawableRes + public int getSourceDrawableResId() { + final LayerState state = mLayerState; + return state == null ? Resources.ID_NULL : state.mSourceDrawableId; + } + + /** * Inflates child layers using the specified parser. */ private void inflateLayers(@NonNull Resources r, @NonNull XmlPullParser parser, @@ -944,6 +957,8 @@ public class AdaptiveIconDrawable extends Drawable implements Drawable.Callback @Config int mChangingConfigurations; @Config int mChildrenChangingConfigurations; + @DrawableRes int mSourceDrawableId = Resources.ID_NULL; + private boolean mCheckedOpacity; private int mOpacity; |