Use reflection to get support launchers for badger.
This commit is contained in:
parent
61c039ee5b
commit
b16754efa7
|
|
@ -53,6 +53,8 @@ HOW TO USE
|
|||
<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
|
||||
|
||||
LICENSE
|
||||
===================================
|
||||
<br/>
|
||||
|
|
|
|||
|
|
@ -17,5 +17,6 @@ android {
|
|||
|
||||
|
||||
dependencies {
|
||||
compile 'me.leolin:ShortcutBadger:1.0.+@aar'
|
||||
// compile 'me.leolin:ShortcutBadger:1.0.+@aar'
|
||||
compile project(':ShortcutBadger')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,13 +8,21 @@
|
|||
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textViewHomePackage"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerHorizontal="true"/>
|
||||
|
||||
<EditText
|
||||
android:id="@+id/numInput"
|
||||
android:layout_below="@id/textViewHomePackage"
|
||||
android:inputType="numberDecimal"
|
||||
android:layout_width="match_parent" android:layout_height="wrap_content"
|
||||
/>
|
||||
|
||||
<Button android:id="@+id/btnSetBadge"
|
||||
android:layout_below="@id/numInput"
|
||||
android:layout_width="wrap_content" android:layout_height="wrap_content"
|
||||
android:text="Set badge"
|
||||
android:layout_centerVertical="true" android:layout_centerHorizontal="true"/>
|
||||
|
|
|
|||
|
|
@ -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<Class<? extends ShortcutBadger>> BADGERS = new LinkedList<Class<? extends ShortcutBadger>>();
|
||||
|
||||
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<String> getSupportLaunchers();
|
||||
|
||||
protected String getEntryActivityName() {
|
||||
ComponentName componentName = mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName()).getComponent();
|
||||
return componentName.getClassName();
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList(
|
||||
"org.adw.launcher",
|
||||
"org.adwfreak.launcher"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList(
|
||||
"com.android.launcher",
|
||||
"com.android.launcher2",
|
||||
"com.google.android.googlequicksearchbox"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList("com.anddoes.launcher");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList(
|
||||
"com.lge.launcher",
|
||||
"com.lge.launcher2"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList("com.htc.launcher");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*
|
||||
* <p/>
|
||||
* TeslaUnread must be installed.
|
||||
*
|
||||
* <p/>
|
||||
* 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<String> getSupportLaunchers() {
|
||||
return Arrays.asList("com.teslacoilsw.launcher");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList(
|
||||
"com.sec.android.app.launcher",
|
||||
"com.sec.android.app.twlauncher"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList("com.majeur.launcher");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<String> getSupportLaunchers() {
|
||||
return Arrays.asList(
|
||||
"com.sonyericsson.home",
|
||||
"com.anddoes.launcher"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue