diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java index 7c5165e..5dc7e40 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -26,7 +27,11 @@ public class AdwHomeBadger implements Badger { Intent intent = new Intent(INTENT_UPDATE_COUNTER); intent.putExtra(PACKAGENAME, componentName.getPackageName()); intent.putExtra(COUNT, badgeCount); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java index 4e0d3b7..c03f92f 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -28,7 +29,11 @@ public class ApexHomeBadger implements Badger { intent.putExtra(PACKAGENAME, componentName.getPackageName()); intent.putExtra(COUNT, badgeCount); intent.putExtra(CLASS, componentName.getClassName()); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AsusHomeLauncher.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AsusHomeLauncher.java index 58a8f6b..bdc2853 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AsusHomeLauncher.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AsusHomeLauncher.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -28,7 +29,11 @@ public class AsusHomeLauncher implements Badger { intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); intent.putExtra("badge_vip_count", 0); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/DefaultBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/DefaultBadger.java index 993db00..077e9b1 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/DefaultBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/DefaultBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.ArrayList; import java.util.List; @@ -26,7 +27,11 @@ public class DefaultBadger implements Badger { intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java index 818b4ad..ce25c12 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -29,7 +30,11 @@ public class LGHomeBadger implements Badger { intent.putExtra(INTENT_EXTRA_BADGE_COUNT, badgeCount); intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, componentName.getClassName()); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java index de31612..d354238 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -29,12 +30,17 @@ public class NewHtcHomeBadger implements Badger { Intent intent1 = new Intent(INTENT_SET_NOTIFICATION); intent1.putExtra(EXTRA_COMPONENT, componentName.flattenToShortString()); intent1.putExtra(EXTRA_COUNT, badgeCount); - context.sendBroadcast(intent1); Intent intent = new Intent(INTENT_UPDATE_SHORTCUT); intent.putExtra(PACKAGENAME, componentName.getPackageName()); intent.putExtra(COUNT, badgeCount); - context.sendBroadcast(intent); + + if(BroadcastHelper.canResolveBroadcast(context, intent1) || BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent1); + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java index 6288a6b..e32dd33 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java @@ -27,20 +27,11 @@ public class NovaHomeBadger implements Badger { @Override public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException { - try { - ContentValues contentValues = new ContentValues(); - contentValues.put(TAG, componentName.getPackageName() + "/" + componentName.getClassName()); - contentValues.put(COUNT, badgeCount); - context.getContentResolver().insert(Uri.parse(CONTENT_URI), contentValues); - } catch (IllegalArgumentException ex) { - /* Fine, TeslaUnread is not installed. */ - } catch (Exception ex) { + ContentValues contentValues = new ContentValues(); + contentValues.put(TAG, componentName.getPackageName() + "/" + componentName.getClassName()); + contentValues.put(COUNT, badgeCount); + context.getContentResolver().insert(Uri.parse(CONTENT_URI), contentValues); - /* Some other error, possibly because the format - of the ContentValues are incorrect. */ - - throw new ShortcutBadgeException(ex.getMessage()); - } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java index 80f5af6..9cfcece 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.util.Arrays; import java.util.List; @@ -27,7 +28,11 @@ public class SolidHomeBadger implements Badger { intent.putExtra(INTENT_EXTRA_PACKAGENAME, componentName.getPackageName()); intent.putExtra(INTENT_EXTRA_COUNT, badgeCount); intent.putExtra(INTENT_EXTRA_CLASS, componentName.getClassName()); - context.sendBroadcast(intent); + if(BroadcastHelper.canResolveBroadcast(context, intent)) { + context.sendBroadcast(intent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + intent.toString()); + } } @Override diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/XiaomiHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/XiaomiHomeBadger.java index 936de85..1e9785f 100644 --- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/XiaomiHomeBadger.java +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/XiaomiHomeBadger.java @@ -7,6 +7,7 @@ import android.content.Intent; import me.leolin.shortcutbadger.Badger; import me.leolin.shortcutbadger.ShortcutBadgeException; import me.leolin.shortcutbadger.ShortcutBadger; +import me.leolin.shortcutbadger.util.BroadcastHelper; import java.lang.reflect.Field; import java.util.Arrays; @@ -34,7 +35,11 @@ public class XiaomiHomeBadger implements Badger { INTENT_ACTION); localIntent.putExtra(EXTRA_UPDATE_APP_COMPONENT_NAME, componentName.getPackageName() + "/" + componentName.getClassName()); localIntent.putExtra(EXTRA_UPDATE_APP_MSG_TEXT, String.valueOf(badgeCount == 0 ? "" : badgeCount)); - context.sendBroadcast(localIntent); + if(BroadcastHelper.canResolveBroadcast(context, localIntent)) { + context.sendBroadcast(localIntent); + } else { + throw new ShortcutBadgeException("unable to resolve intent: " + localIntent.toString()); + } } } diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/util/BroadcastHelper.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/util/BroadcastHelper.java new file mode 100644 index 0000000..5d5b1d3 --- /dev/null +++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/util/BroadcastHelper.java @@ -0,0 +1,19 @@ +package me.leolin.shortcutbadger.util; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; + +import java.util.List; + +/** + * Created by mahijazi on 17/05/16. + */ +public class BroadcastHelper { + public static boolean canResolveBroadcast(Context context, Intent intent) { + PackageManager packageManager = context.getPackageManager(); + List receivers = packageManager.queryBroadcastReceivers(intent, 0); + return receivers != null && receivers.size() > 0; + } +}