From c842392f677e018185499959cc020066ab2c03ed Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 11 Jul 2019 08:42:20 +0200 Subject: [PATCH] Handle screen off in sync service --- FAQ.md | 2 +- .../eu/faircode/email/ServiceSynchronize.java | 21 ++++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/FAQ.md b/FAQ.md index 6c53a00353..0cafa44a31 100644 --- a/FAQ.md +++ b/FAQ.md @@ -1897,7 +1897,7 @@ for a list of privacy friendly email providers with advantages and disadvantages **(113) How does biometric authentication work?** If your device has a biometric sensor, for example a fingerprint sensor, you can enable/disable biometric authentication in the navigation (hamburger) menu of the setup screen. -When enabled FairEmail will require biometric authentication after a period of inactivity or after the screen has been turned off while FairEmail was visible. +When enabled FairEmail will require biometric authentication after a period of inactivity or after the screen has been turned off while FairEmail was running. Activity is navigation within FairEmail, for example opening a conversation thread. When biometric authentication is enabled only a summary notification with the number of new messages will be shown, so all message content is hidden. diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 3f8583a1bf..34bef0fdfe 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -127,7 +127,9 @@ public class ServiceSynchronize extends LifecycleService { builder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); // Removed because of Android VPN service // builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); - cm.registerNetworkCallback(builder.build(), networkCallback); + cm.registerNetworkCallback(builder.build(), onNetworkCallback); + + registerReceiver(onScreenOff, new IntentFilter(Intent.ACTION_SCREEN_OFF)); DB db = DB.getInstance(this); @@ -183,6 +185,8 @@ public class ServiceSynchronize extends LifecycleService { }); WorkerCleanup.queue(this); + + } @Override @@ -190,8 +194,10 @@ public class ServiceSynchronize extends LifecycleService { Log.i("Service destroy"); EntityLog.log(this, "Service destroy"); + unregisterReceiver(onScreenOff); + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - cm.unregisterNetworkCallback(networkCallback); + cm.unregisterNetworkCallback(onNetworkCallback); Core.notifyReset(this); @@ -1265,7 +1271,7 @@ public class ServiceSynchronize extends LifecycleService { } } - ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { + private ConnectivityManager.NetworkCallback onNetworkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { networkState.update(ConnectionHelper.getNetworkState(ServiceSynchronize.this)); @@ -1357,6 +1363,15 @@ public class ServiceSynchronize extends LifecycleService { } }; + private BroadcastReceiver onScreenOff = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + Log.i("Received " + intent); + Log.logExtras(intent); + Helper.clearAuthentication(ServiceSynchronize.this); + } + }; + static void boot(final Context context) { if (!booted) { booted = true;