From 5ce4282dee39b84ce5c3219c4e4c3311c7a011ee Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 7 Nov 2018 12:10:58 +0000 Subject: [PATCH] Added global on/off settings tile --- app/src/main/AndroidManifest.xml | 14 +++- .../email/ServiceTileSynchronize.java | 74 +++++++++++++++++++ ...erviceTile.java => ServiceTileUnseen.java} | 10 ++- app/src/main/res/values/strings.xml | 3 + 4 files changed, 95 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/eu/faircode/email/ServiceTileSynchronize.java rename app/src/main/java/eu/faircode/email/{ServiceTile.java => ServiceTileUnseen.java} (90%) 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