diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8df3c2727b..81e010a46b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -112,9 +112,19 @@
android:permission="android.permission.BIND_JOB_SERVICE" />
+
+
+
+
+
+
diff --git a/app/src/main/java/eu/faircode/email/ServiceTileSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceTileSynchronize.java
new file mode 100644
index 0000000000..3adbdc71eb
--- /dev/null
+++ b/app/src/main/java/eu/faircode/email/ServiceTileSynchronize.java
@@ -0,0 +1,74 @@
+package eu.faircode.email;
+
+/*
+ This file is part of FairEmail.
+
+ FairEmail is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ FairEmail is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with FairEmail. If not, see .
+
+ Copyright 2018 by Marcel Bokhorst (M66B)
+*/
+
+import android.annotation.TargetApi;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.preference.PreferenceManager;
+import android.service.quicksettings.Tile;
+import android.service.quicksettings.TileService;
+import android.util.Log;
+
+@TargetApi(Build.VERSION_CODES.N)
+public class ServiceTileSynchronize extends TileService implements SharedPreferences.OnSharedPreferenceChangeListener {
+ public void onStartListening() {
+ Log.i(Helper.TAG, "Start tile synchronize");
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ prefs.registerOnSharedPreferenceChangeListener(this);
+ update();
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
+ if ("enabled".equals(key))
+ update();
+ }
+
+ private void update() {
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ boolean enabled = prefs.getBoolean("enabled", false);
+ Log.i(Helper.TAG, "Update tile synchronize=" + enabled);
+
+ Tile tile = getQsTile();
+ if (tile != null) {
+ tile.setState(enabled ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
+ tile.updateTile();
+ }
+ }
+
+ public void onStopListening() {
+ Log.i(Helper.TAG, "Stop tile synchronize");
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ prefs.unregisterOnSharedPreferenceChangeListener(this);
+ }
+
+ public void onClick() {
+ Log.i(Helper.TAG, "Click tile synchronize");
+
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
+ boolean enabled = !prefs.getBoolean("enabled", false);
+ prefs.edit().putBoolean("enabled", enabled).apply();
+ if (enabled)
+ ServiceSynchronize.start(this);
+ else
+ ServiceSynchronize.stop(this);
+ }
+}
diff --git a/app/src/main/java/eu/faircode/email/ServiceTile.java b/app/src/main/java/eu/faircode/email/ServiceTileUnseen.java
similarity index 90%
rename from app/src/main/java/eu/faircode/email/ServiceTile.java
rename to app/src/main/java/eu/faircode/email/ServiceTileUnseen.java
index 9bc19d436d..bcc100deb0 100644
--- a/app/src/main/java/eu/faircode/email/ServiceTile.java
+++ b/app/src/main/java/eu/faircode/email/ServiceTileUnseen.java
@@ -33,7 +33,7 @@ import androidx.lifecycle.LifecycleService;
import androidx.lifecycle.Observer;
@TargetApi(Build.VERSION_CODES.N)
-public class ServiceTile extends TileService {
+public class ServiceTileUnseen extends TileService {
LifecycleService owner = new LifecycleService();
@Override
@@ -61,12 +61,14 @@ public class ServiceTile extends TileService {
}
public void onStartListening() {
- Log.i(Helper.TAG, "Tile start");
+ Log.i(Helper.TAG, "Start tile unseen");
DB db = DB.getInstance(this);
db.message().liveUnseenUnified().observe(owner, new Observer>() {
@Override
public void onChanged(List messages) {
+ Log.i(Helper.TAG, "Update tile unseen=" + messages.size());
+
Tile tile = getQsTile();
if (tile != null) {
tile.setState(messages.size() > 0 ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
@@ -79,14 +81,14 @@ public class ServiceTile extends TileService {
}
public void onStopListening() {
- Log.i(Helper.TAG, "Tile stop");
+ Log.i(Helper.TAG, "Stop tile unseen");
DB db = DB.getInstance(this);
db.message().liveUnseenUnified().removeObservers(owner);
}
public void onClick() {
- Log.i(Helper.TAG, "Tile click");
+ Log.i(Helper.TAG, "Click tile unseen");
Intent clear = new Intent(this, ServiceSynchronize.class);
clear.setAction("clear");
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c437204152..9d32474f24 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -7,6 +7,9 @@
Notifications
Errors
+ Synchronize
+ New messages
+
Compose