Decouple notifications and widget/badge

This commit is contained in:
M66B
2019-09-22 09:45:37 +02:00
parent ebc7c98425
commit 8511de077a
5 changed files with 99 additions and 36 deletions

View File

@@ -78,6 +78,8 @@ import javax.mail.event.MessageCountEvent;
import javax.mail.event.StoreEvent;
import javax.mail.event.StoreListener;
import me.leolin.shortcutbadger.ShortcutBadger;
import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
public class ServiceSynchronize extends ServiceBase {
@@ -145,6 +147,28 @@ public class ServiceSynchronize extends ServiceBase {
}
});
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
db.message().liveUnseen().observe(this, new Observer<TupleMessageStats>() {
private TupleMessageStats lastStats = null;
@Override
public void onChanged(TupleMessageStats stats) {
if (stats != null) {
boolean unseen_ignored = prefs.getBoolean("unseen_ignored", false);
if (!unseen_ignored || stats.ignored == null)
stats.ignored = 0;
if (!stats.equals(lastStats)) {
Log.i("Stats " + stats);
lastStats = stats;
setUnseen(stats.unseen - stats.ignored);
}
}
}
});
final TwoStateOwner cowner = new TwoStateOwner(this, "liveUnseenNotify");
db.folder().liveSynchronizing().observe(this, new Observer<Integer>() {
@@ -264,7 +288,7 @@ public class ServiceSynchronize extends ServiceBase {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
cm.unregisterNetworkCallback(onNetworkCallback);
Core.notifyReset(this);
setUnseen(null);
try {
stopForeground(true);
@@ -381,6 +405,22 @@ public class ServiceSynchronize extends ServiceBase {
return builder;
}
private void setUnseen(Integer unseen) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean badge = prefs.getBoolean("badge", true);
Widget.update(this, unseen);
try {
if (unseen == null || !badge)
ShortcutBadger.removeCount(this);
else
ShortcutBadger.applyCount(this, unseen);
} catch (Throwable ex) {
Log.e(ex);
}
}
private void onAlarm() {
schedule(this);
onReload(true, "alarm");