mirror of
https://github.com/M66B/FairEmail.git
synced 2026-04-01 22:56:33 +02:00
Decouple notifications and widget/badge
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user