diff --git a/src/com/android/launcher3/SuperDynamicIconProvider.java b/src/com/android/launcher3/SuperDynamicIconProvider.java index 23ecbba862..11ac8c9d1d 100644 --- a/src/com/android/launcher3/SuperDynamicIconProvider.java +++ b/src/com/android/launcher3/SuperDynamicIconProvider.java @@ -2,6 +2,9 @@ import android.content.Intent; import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.res.AssetManager; +import android.content.res.XmlResourceParser; import android.graphics.drawable.Drawable; import com.android.launcher3.compat.LauncherActivityInfoCompat; import com.android.launcher3.compat.UserHandleCompat; @@ -10,7 +13,11 @@ import android.content.res.TypedArray; import android.content.res.Resources; import android.os.Bundle; + +import java.io.IOException; +import java.io.InputStream; import java.util.Calendar; +import java.util.HashMap; import java.util.List; import android.os.Handler; @@ -18,6 +25,9 @@ import android.content.Context; import android.content.pm.PackageManager; import android.content.BroadcastReceiver; +import android.util.Log; + +import org.xmlpull.v1.XmlPullParser; public class SuperDynamicIconProvider extends IconProvider { @@ -64,6 +74,28 @@ public Drawable getIcon(final LauncherActivityInfoCompat launcherActivityInfoCom Drawable drawable = null; String packageName = launcherActivityInfoCompat.getApplicationInfo().packageName; + try { + Resources resourcesForApplication = mPackageManager.getResourcesForApplication(packageName); + AssetManager assets = resourcesForApplication.getAssets(); + XmlResourceParser parseXml = assets.openXmlResourceParser("AndroidManifest.xml"); + int eventType; + while ((eventType = parseXml.nextToken()) != XmlPullParser.END_DOCUMENT) { + if (eventType == XmlPullParser.START_TAG && parseXml.getName().equals("application")) { + for (int i = 0; i < parseXml.getAttributeCount(); i++) { + if (parseXml.getAttributeName(i).equals("roundIcon")) { + int roundIconId = Integer.parseInt(parseXml.getAttributeValue(i).substring(1)); + drawable = resourcesForApplication.getDrawableForDensity(roundIconId, iconDpi); + break; + } + } + } + } + parseXml.close(); + } + catch (Exception ex) { + Log.w("parseRoundIcon", ex); + } + if (isCalendar(packageName)) { try { ActivityInfo activityInfo = mPackageManager.getActivityInfo(launcherActivityInfoCompat.getComponentName(), PackageManager.GET_META_DATA | PackageManager.MATCH_UNINSTALLED_PACKAGES); diff --git a/src/com/android/launcher3/reflection/l.java b/src/com/android/launcher3/reflection/l.java index 19e8270af1..fb3007dc2e 100644 --- a/src/com/android/launcher3/reflection/l.java +++ b/src/com/android/launcher3/reflection/l.java @@ -12,6 +12,8 @@ import android.content.Context; import android.os.HandlerThread; import android.os.Handler; +import android.util.Log; + import com.android.launcher3.reflectionevents.b; public class l implements Handler.Callback, b @@ -131,7 +133,12 @@ public boolean handleMessage(final Message message) { } case 3: { if (this.bd != null) { - this.bd.aD("GEL"); + try { + this.bd.aD("GEL"); + } + catch (Exception ex) { + Log.w("SuggestionsRefresh", ex); + } } return b; }