diff --git a/README.md b/README.md
index bae522e..760d804 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,8 @@ HOW TO USE
+
+
LICENSE
===================================
diff --git a/SampleApp/build.gradle b/SampleApp/build.gradle
index fe4799a..de90e3c 100644
--- a/SampleApp/build.gradle
+++ b/SampleApp/build.gradle
@@ -17,5 +17,6 @@ android {
dependencies {
- compile 'me.leolin:ShortcutBadger:1.0.+@aar'
+// compile 'me.leolin:ShortcutBadger:1.0.+@aar'
+ compile project(':ShortcutBadger')
}
diff --git a/SampleApp/src/main/java/me/leolin/shortcutbadger/example/MainActivity.java b/SampleApp/src/main/java/me/leolin/shortcutbadger/example/MainActivity.java
index 169f994..f58a07c 100644
--- a/SampleApp/src/main/java/me/leolin/shortcutbadger/example/MainActivity.java
+++ b/SampleApp/src/main/java/me/leolin/shortcutbadger/example/MainActivity.java
@@ -1,10 +1,14 @@
package me.leolin.shortcutbadger.example;
import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
+import android.widget.TextView;
import android.widget.Toast;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
@@ -41,6 +45,16 @@ public class MainActivity extends Activity {
}
}
});
+
+
+ //find the home launcher Package
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.addCategory(Intent.CATEGORY_HOME);
+ ResolveInfo resolveInfo = getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
+ String currentHomePackage = resolveInfo.activityInfo.packageName;
+
+ TextView textViewHomePackage = (TextView) findViewById(R.id.textViewHomePackage);
+ textViewHomePackage.setText("launcher:" + currentHomePackage);
}
diff --git a/SampleApp/src/main/res/layout/activity_main.xml b/SampleApp/src/main/res/layout/activity_main.xml
index 041da10..fdc9b49 100644
--- a/SampleApp/src/main/res/layout/activity_main.xml
+++ b/SampleApp/src/main/res/layout/activity_main.xml
@@ -8,13 +8,21 @@
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
+
+
diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/ShortcutBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/ShortcutBadger.java
index 62d4274..8f73276 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/ShortcutBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/ShortcutBadger.java
@@ -8,31 +8,30 @@ import android.content.pm.ResolveInfo;
import android.os.Build;
import me.leolin.shortcutbadger.impl.*;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.util.LinkedList;
+import java.util.List;
+
/**
- * Created with IntelliJ IDEA.
- * User: leolin
- * Date: 2013/11/14
- * Time: 下午5:51
- * To change this template use File | Settings | File Templates.
+ * @author Leo Lin
*/
public abstract class ShortcutBadger {
- private static final String HOME_PACKAGE_SONY1 = "com.sonyericsson.home";
- private static final String HOME_PACKAGE_SONY2 = "com.anddoes.launcher";
- private static final String HOME_PACKAGE_SAMSUNG1 = "com.sec.android.app.launcher";
- private static final String HOME_PACKAGE_SAMSUNG2 = "com.sec.android.app.twlauncher";
- private static final String HOME_PACKAGE_LG1 = "com.lge.launcher";
- private static final String HOME_PACKAGE_LG2 = "com.lge.launcher2";
- private static final String HOME_PACKAGE_HTC = "com.htc.launcher";
- private static final String HOME_PACKAGE_APEX = "com.anddoes.launcher";
- private static final String HOME_PACKAGE_ADW = "org.adw.launcher";
- private static final String HOME_PACKAGE_ADW_EX = "org.adwfreak.launcher";
- private static final String HOME_PACKAGE_NOVA = "com.teslacoilsw.launcher";
- private static final String HOME_PACKAGE_ANDROID1 = "com.android.launcher";
- private static final String HOME_PACKAGE_ANDROID2 = "com.android.launcher2";
- private static final String HOME_PACKAGE_ANDROID3 = "com.google.android.googlequicksearchbox";
- private static final String HOME_PACKAGE_SOLID = "com.majeur.launcher";
+ private static final List> BADGERS = new LinkedList>();
+
+ static {
+ BADGERS.add(AdwHomeBadger.class);
+ BADGERS.add(AndroidHomeBadger.class);
+ BADGERS.add(ApexHomeBadger.class);
+ BADGERS.add(LGHomeBadger.class);
+ BADGERS.add(NewHtcHomeBadger.class);
+ BADGERS.add(NovaHomeBadger.class);
+ BADGERS.add(SamsungHomeBadger.class);
+ BADGERS.add(SolidHomeBadger.class);
+ BADGERS.add(SonyHomeBadger.class);
+ }
private static final String MESSAGE_NOT_SUPPORT_BADGE_COUNT = "ShortBadger is currently not support the badgeCount \"%d\"";
private static final String MESSAGE_NOT_SUPPORT_THIS_HOME = "ShortcutBadger is currently not support the home launcher package \"%s\"";
@@ -40,7 +39,7 @@ public abstract class ShortcutBadger {
private static final int MIN_BADGE_COUNT = 0;
private static final int MAX_BADGE_COUNT = 99;
- private static ShortcutBadger sShortcutBadger;
+ private static ShortcutBadger mShortcutBadger;
private ShortcutBadger() {
}
@@ -67,14 +66,15 @@ public abstract class ShortcutBadger {
String currentHomePackage = resolveInfo.activityInfo.packageName;
- ShortcutBadger shortcutBadger = getShortcutBadger(currentHomePackage, context);
-
- //not support this home launcher package
- if (shortcutBadger == null) {
- String exceptionMessage = String.format(MESSAGE_NOT_SUPPORT_THIS_HOME, currentHomePackage);
- throw new ShortcutBadgeException(exceptionMessage);
- }
try {
+ ShortcutBadger shortcutBadger = getShortcutBadger(currentHomePackage, context);
+
+ //not support this home launcher package
+ if (shortcutBadger == null) {
+ String exceptionMessage = String.format(MESSAGE_NOT_SUPPORT_THIS_HOME, currentHomePackage);
+ throw new ShortcutBadgeException(exceptionMessage);
+ }
+
shortcutBadger.executeBadge(badgeCount);
} catch (Throwable e) {
throw new ShortcutBadgeException("Unable to execute badge:" + e.getMessage());
@@ -82,9 +82,9 @@ public abstract class ShortcutBadger {
}
- private static ShortcutBadger getShortcutBadger(String currentHomePackage, Context context) {
- if (sShortcutBadger != null) {
- return sShortcutBadger;
+ private static ShortcutBadger getShortcutBadger(String currentHomePackage, Context context) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
+ if (mShortcutBadger != null) {
+ return mShortcutBadger;
}
// Workaround for Meizu:
@@ -95,36 +95,21 @@ public abstract class ShortcutBadger {
}
- if (HOME_PACKAGE_SONY1.equals(currentHomePackage) ||
- HOME_PACKAGE_SONY2.equals(currentHomePackage)) {
- sShortcutBadger = new SonyHomeBadger(context);
- } else if (HOME_PACKAGE_SAMSUNG1.equals(currentHomePackage) ||
- HOME_PACKAGE_SAMSUNG2.equals(currentHomePackage)) {
- sShortcutBadger = new SamsungHomeBadger(context);
- } else if (HOME_PACKAGE_LG1.equals(currentHomePackage) ||
- HOME_PACKAGE_LG2.equals(currentHomePackage)) {
- sShortcutBadger = new LGHomeBadger(context);
- } else if (HOME_PACKAGE_HTC.equals(currentHomePackage)) {
- sShortcutBadger = new NewHtcHomeBadger(context);
- } else if (HOME_PACKAGE_ANDROID1.equals(currentHomePackage) ||
- HOME_PACKAGE_ANDROID2.equals(currentHomePackage) ||
- HOME_PACKAGE_ANDROID3.equals(currentHomePackage)) {
- sShortcutBadger = new AndroidHomeBadger(context);
- } else if (HOME_PACKAGE_APEX.equals(currentHomePackage)) {
- sShortcutBadger = new ApexHomeBadger(context);
- } else if (HOME_PACKAGE_ADW.equals(currentHomePackage)
- || HOME_PACKAGE_ADW_EX.equals(currentHomePackage)) {
- sShortcutBadger = new AdwHomeBadger(context);
- } else if (HOME_PACKAGE_NOVA.equals(currentHomePackage)) {
- sShortcutBadger = new NovaHomeBadger(context);
- } else if (HOME_PACKAGE_SOLID.equals(currentHomePackage)) {
- sShortcutBadger = new SolidHomeBadger(context);
+ for (Class extends ShortcutBadger> badger : BADGERS) {
+ Constructor extends ShortcutBadger> constructor = badger.getConstructor(Context.class);
+ ShortcutBadger shortcutBadger = constructor.newInstance(context);
+ if (shortcutBadger.getSupportLaunchers().contains(currentHomePackage)) {
+ mShortcutBadger = shortcutBadger;
+ break;
+ }
}
- return sShortcutBadger;
+ return mShortcutBadger;
}
+ public abstract List getSupportLaunchers();
+
protected String getEntryActivityName() {
ComponentName componentName = mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName()).getComponent();
return componentName.getClassName();
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 92c2e46..569daa8 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AdwHomeBadger.java
@@ -2,10 +2,12 @@ package me.leolin.shortcutbadger.impl;
import android.content.Context;
import android.content.Intent;
-
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Gernot Pansy
*/
@@ -27,4 +29,12 @@ public class AdwHomeBadger extends ShortcutBadger {
intent.putExtra(COUNT, badgeCount);
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList(
+ "org.adw.launcher",
+ "org.adwfreak.launcher"
+ );
+ }
}
diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AndroidHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AndroidHomeBadger.java
index 9d0b9e7..6c2433f 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AndroidHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/AndroidHomeBadger.java
@@ -4,9 +4,12 @@ import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
-import me.leolin.shortcutbadger.util.ImageUtil;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import me.leolin.shortcutbadger.util.ImageUtil;
+
+import java.util.Arrays;
+import java.util.List;
/**
* @author Leo Lin
@@ -32,4 +35,13 @@ public class AndroidHomeBadger extends ShortcutBadger {
contentValues.put("icon", bytes);
contentResolver.update(mUri, contentValues, "title=?", new String[]{appName});
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList(
+ "com.android.launcher",
+ "com.android.launcher2",
+ "com.google.android.googlequicksearchbox"
+ );
+ }
}
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 e1e9f2c..d9f1df7 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/ApexHomeBadger.java
@@ -6,6 +6,9 @@ import android.content.Intent;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Gernot Pansy
*/
@@ -29,4 +32,9 @@ public class ApexHomeBadger extends ShortcutBadger {
intent.putExtra(CLASS, getEntryActivityName());
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList("com.anddoes.launcher");
+ }
}
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 08d65a0..f8659aa 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/LGHomeBadger.java
@@ -4,6 +4,9 @@ import android.content.Context;
import android.content.Intent;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Leo Lin
*/
@@ -26,4 +29,12 @@ public class LGHomeBadger extends ShortcutBadger {
intent.putExtra(INTENT_EXTRA_ACTIVITY_NAME, getEntryActivityName());
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList(
+ "com.lge.launcher",
+ "com.lge.launcher2"
+ );
+ }
}
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 6201b2d..3527215 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NewHtcHomeBadger.java
@@ -6,6 +6,9 @@ import android.content.Intent;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Leo Lin
*/
@@ -36,4 +39,9 @@ public class NewHtcHomeBadger extends ShortcutBadger {
intent.putExtra(COUNT, badgeCount);
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList("com.htc.launcher");
+ }
}
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 c7b3a4c..cb1368d 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/NovaHomeBadger.java
@@ -1,19 +1,19 @@
package me.leolin.shortcutbadger.impl;
-import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
-import android.database.Cursor;
import android.net.Uri;
-
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* Shortcut Badger support for Nova Launcher.
- *
+ *
* TeslaUnread must be installed.
- *
+ *
* User: Gernot Pansy
* Date: 2014/11/03
* Time: 7:15
@@ -45,4 +45,9 @@ public class NovaHomeBadger extends ShortcutBadger {
throw new ShortcutBadgeException(ex.getMessage());
}
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList("com.teslacoilsw.launcher");
+ }
}
diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SamsungHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SamsungHomeBadger.java
index 3e58ffb..826a447 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SamsungHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SamsungHomeBadger.java
@@ -9,6 +9,9 @@ import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
import me.leolin.shortcutbadger.util.CloseHelper;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Leo Lin
*/
@@ -60,4 +63,12 @@ public class SamsungHomeBadger extends ShortcutBadger {
return contentValues;
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList(
+ "com.sec.android.app.launcher",
+ "com.sec.android.app.twlauncher"
+ );
+ }
}
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 bdc2338..7cdd27c 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SolidHomeBadger.java
@@ -6,6 +6,9 @@ import android.content.Intent;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author MajeurAndroid
*/
@@ -28,4 +31,9 @@ public class SolidHomeBadger extends ShortcutBadger {
intent.putExtra(CLASS, getEntryActivityName());
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList("com.majeur.launcher");
+ }
}
diff --git a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SonyHomeBadger.java b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SonyHomeBadger.java
index d4da54c..957cfcd 100644
--- a/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SonyHomeBadger.java
+++ b/ShortcutBadger/src/main/java/me/leolin/shortcutbadger/impl/SonyHomeBadger.java
@@ -4,6 +4,9 @@ import android.content.Context;
import android.content.Intent;
import me.leolin.shortcutbadger.ShortcutBadger;
+import java.util.Arrays;
+import java.util.List;
+
/**
* @author Leo Lin
*/
@@ -29,4 +32,12 @@ public class SonyHomeBadger extends ShortcutBadger {
intent.putExtra(INTENT_EXTRA_SHOW_MESSAGE, badgeCount > 0);
mContext.sendBroadcast(intent);
}
+
+ @Override
+ public List getSupportLaunchers() {
+ return Arrays.asList(
+ "com.sonyericsson.home",
+ "com.anddoes.launcher"
+ );
+ }
}