Skip to content

Commit

Permalink
Update to 1.1.1.
Browse files Browse the repository at this point in the history
Add more launcher screenshot.
Add DefaultBadger.
  • Loading branch information
leolin310148 committed May 14, 2015
1 parent c3f9106 commit e420d43
Show file tree
Hide file tree
Showing 11 changed files with 167 additions and 325 deletions.
109 changes: 64 additions & 45 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,54 +7,69 @@ The ShortcutBadger makes your Android App showing the count of unread messages a

<table>
<tr>
<td width="130">
<h3>Android</h3>
<h5>(before 4.4)</h5>
<h5>(Deprecated since 1.1.0)</h5>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_android.png"/>
</td>
<td width="130">
<h3>Sony</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_sony.png"/>
</td>
<td width="130">
<h3>Samsung</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_samsung.png"/>
</td>
<td width="130">
<h3>Sony</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_sony.png"/>
</td>
<td width="130">
<h3>Samsung</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_samsung.png"/>
</td>
<td width="130">
<h3>LG</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_lg.png"/>
</td>
</tr>
<tr>
<td width="130">
<h3>LG</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_lg.png"/>
</td>
<td width="130">
<h3>HTC</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_htc.png"/>
</td>
<td width="130">
<h3>Xiaomi</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_xiaomi.png"/>
</td>
<td width="130">
<h3>HTC</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_htc.png"/>
</td>
<td width="130">
<h3>Xiaomi</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_xiaomi.png"/>
</td>
<td width="130">
<h3>ASUS</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_asus.png"/>
</td>
<tr>
<td width="130">
<h3>ADW</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_adw.png"/>
</td>
<td width="130">
<h3>APEX</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_apex.png"/>
</td>
<td width="130">
<h3>NOVA</h3>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_nova.png"/>
</td>
</tr>

<tr>
<td width="130">
<h3>ASUS</h3>
<h3>Android</h3>
<h5>(before 4.4)</h5>
<h5>(Deprecated since 1.1.0)</h5>
<br>
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_asus.png"/>
</td>
<td width="130">
</td>
<td width="130">
<img src="https://raw.github.com/leolin310148/ShortcutBadger/master/screenshots/ss_android.png"/>
</td>
</tr>

</table>


Nova launcher with TeslaUnread,Apex launcher,Adw Launcher provided by [notz](https://github.com/notz)</br/>
Solid launcher provided by [MajeurAndroid](https://github.com/MajeurAndroid)

Expand All @@ -70,18 +85,17 @@ USAGE
<br/>2. Add dependencies for ShortcutBadger, it's available from maven now.

dependencies {
compile 'me.leolin:ShortcutBadger:1.1.0@aar'
compile 'me.leolin:ShortcutBadger:1.1.1@aar'
}

<br/>3. Add the codes below:

int badgeCount = 1;
try {
ShortcutBadger.setBadge(getApplicationContext(), badgeCount);
} catch (ShortcutBadgeException e) {
//handle the Exception
}
<br/>4. If you want to remove the badge, just set the badgeCount as 0.
ShortcutBadger.with(getApplicationContext()).count(badgeCount);
<br/>4. If you want to remove the badge

ShortcutBadger.with(getApplicationContext()).remove();
<br/>
<br/>
<br/>
Expand All @@ -105,6 +119,11 @@ Please use version 1.1.0+

CHANGE LOG
===================================
1.1.1:<br/>
Add DefaultBadger because some launchers use android.intent.action.BADGE_COUNT_UPDATE to update count.
<br/>
Since the ShortcutBadgerException is helpless. So change api to set badge and never have to handle the exception again.
<br/><br/>
1.1.0:<br/>
Remove Android Launcher support due to Google Play Developer Term Violation since 4.4
<br/><br/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import me.leolin.shortcutbadger.ShortcutBadgeException;
import me.leolin.shortcutbadger.ShortcutBadger;


Expand All @@ -29,20 +28,17 @@ protected void onCreate(Bundle savedInstanceState) {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int badgeCount = 0;
try {
int badgeCount = 0;
try {
badgeCount = Integer.parseInt(numInput.getText().toString());
} catch (NumberFormatException e) {
Toast.makeText(getApplicationContext(), "Error input", Toast.LENGTH_SHORT).show();
}

ShortcutBadger.setBadge(getApplicationContext(), badgeCount);

Toast.makeText(getApplicationContext(), "Set count=" + badgeCount, Toast.LENGTH_SHORT).show();
} catch (ShortcutBadgeException e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
badgeCount = Integer.parseInt(numInput.getText().toString());
} catch (NumberFormatException e) {
Toast.makeText(getApplicationContext(), "Error input", Toast.LENGTH_SHORT).show();
}

// ShortcutBadger.setBadge(getApplicationContext(), badgeCount);
ShortcutBadger.with(getApplicationContext()).count(badgeCount);

Toast.makeText(getApplicationContext(), "Set count=" + badgeCount, Toast.LENGTH_SHORT).show();
}
});

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
package me.leolin.shortcutbadger;

/**
* Created with IntelliJ IDEA.
* User: leolin
* Date: 2013/11/14
* Time: 下午6:19
* To change this template use File | Settings | File Templates.
*/
@Deprecated
public class ShortcutBadgeException extends Exception {
public ShortcutBadgeException(String message) {
super(message);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.util.Log;
import me.leolin.shortcutbadger.impl.*;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.LinkedList;
import java.util.List;

Expand All @@ -19,12 +19,12 @@
*/
public abstract class ShortcutBadger {

private static final String LOG_TAG = ShortcutBadger.class.getSimpleName();

private static final List<Class<? extends ShortcutBadger>> BADGERS = new LinkedList<Class<? extends ShortcutBadger>>();

static {
BADGERS.add(AdwHomeBadger.class);
// BADGERS.add(AndroidHomeBadger.class);
// BADGERS.add(Android2HomeBadger.class);
BADGERS.add(ApexHomeBadger.class);
BADGERS.add(LGHomeBadger.class);
BADGERS.add(NewHtcHomeBadger.class);
Expand All @@ -36,86 +36,73 @@ public abstract class ShortcutBadger {
BADGERS.add(AsusHomeLauncher.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\"";

private static final int MIN_BADGE_COUNT = 0;
private static final int MAX_BADGE_COUNT = 99;

private static ShortcutBadger mShortcutBadger;

private ShortcutBadger() {
}

protected Context mContext;

protected ShortcutBadger(Context context) {
this.mContext = context;
public static ShortcutBadger with(Context context) {
return getShortcutBadger(context);
}

protected abstract void executeBadge(int badgeCount) throws ShortcutBadgeException;

public static void setBadge(Context context, int badgeCount) throws ShortcutBadgeException {
//badgeCount should between 0 to 99
if (badgeCount < MIN_BADGE_COUNT || badgeCount > MAX_BADGE_COUNT) {
String exceptionMessage = String.format(MESSAGE_NOT_SUPPORT_BADGE_COUNT, badgeCount);
throw new ShortcutBadgeException(exceptionMessage);
}

//find the home launcher Package
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String currentHomePackage = resolveInfo.activityInfo.packageName;


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);
getShortcutBadger(context).executeBadge(badgeCount);
} catch (Throwable e) {
throw new ShortcutBadgeException("Unable to execute badge:" + e.getMessage());
}

}

private static ShortcutBadger getShortcutBadger(String currentHomePackage, Context context) throws IllegalAccessException, InstantiationException, NoSuchMethodException, InvocationTargetException {
private static ShortcutBadger getShortcutBadger(Context context) {
if (mShortcutBadger != null) {
return mShortcutBadger;
}
Log.d(LOG_TAG, "Finding badger");

// Workaround for Meizu:
// Meizu declare 'com.android.launcher', but hold something else
// Icons get duplicated on restart after badge change
if (Build.MANUFACTURER.toLowerCase().contains("meizu")) {
return null;
}

if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
mShortcutBadger = new XiaomiHomeBadger(context);
return mShortcutBadger;
}
//find the home launcher Package
try {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
ResolveInfo resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
String currentHomePackage = resolveInfo.activityInfo.packageName;

if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
mShortcutBadger = new XiaomiHomeBadger(context);
return mShortcutBadger;
}

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;
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;
}
}
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage(), e);
}

if (mShortcutBadger == null) {
mShortcutBadger = new DefaultBadger(context);
}

Log.d(LOG_TAG, "Returning badger:" + mShortcutBadger.getClass().getCanonicalName());
return mShortcutBadger;
}

public abstract List<String> getSupportLaunchers();

private ShortcutBadger() {
}

protected Context mContext;

protected ShortcutBadger(Context context) {
this.mContext = context;
}

protected abstract void executeBadge(int badgeCount) throws ShortcutBadgeException;

protected abstract List<String> getSupportLaunchers();

protected String getEntryActivityName() {
ComponentName componentName = mContext.getPackageManager().getLaunchIntentForPackage(mContext.getPackageName()).getComponent();
Expand All @@ -125,4 +112,16 @@ protected String getEntryActivityName() {
protected String getContextPackageName() {
return mContext.getPackageName();
}

public void count(int count) {
try {
executeBadge(count);
} catch (Exception e) {
Log.e(LOG_TAG, e.getMessage(), e);
}
}

public void remove() {
count(0);
}
}
Loading

0 comments on commit e420d43

Please sign in to comment.