From 1313005e2ff6d339a1feb68364fc3d7695567a84 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 17 Jan 2021 17:23:26 +0100 Subject: [PATCH] Listen for data saver events --- .../eu/faircode/email/ServiceSynchronize.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 53593a1585..e599b2c358 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -181,6 +181,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) registerReceiver(idleModeChangedReceiver, new IntentFilter(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + registerReceiver(dataSaverChanged, new IntentFilter(ConnectivityManager.ACTION_RESTRICT_BACKGROUND_CHANGED)); + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); DB db = DB.getInstance(this); @@ -745,6 +748,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); prefs.unregisterOnSharedPreferenceChangeListener(this); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + unregisterReceiver(dataSaverChanged); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) unregisterReceiver(idleModeChangedReceiver); @@ -2145,6 +2151,21 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } }; + private BroadcastReceiver dataSaverChanged = new BroadcastReceiver() { + @Override + @RequiresApi(api = Build.VERSION_CODES.N) + public void onReceive(Context context, Intent intent) { + Log.i("Received intent=" + intent + + " " + TextUtils.join(" ", Log.getExtras(intent.getExtras()))); + + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + Integer status = (cm == null ? null : cm.getRestrictBackgroundStatus()); + EntityLog.log(context, "Data saver=" + status); + + updateNetworkState(null, "datasaver"); + } + }; + private class MediatorState extends MediatorLiveData> { private boolean running = true; private ConnectionHelper.NetworkState lastNetworkState = null;