From 1ad3e7638bf333c44982ddce805757d1fc003773 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 9 Feb 2024 13:18:54 +0100 Subject: [PATCH] Improved datasaving check --- .../eu/faircode/email/FragmentMessages.java | 52 ++++++++++++++++--- 1 file changed, 46 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 1ca9a372aa..6e0381980d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -5414,12 +5414,52 @@ public class FragmentMessages extends FragmentBase } if (grpDataSaver != null && - ("enabled".equals(key) || "datasaver_reminder".equals(key))) { - boolean enabled = prefs.getBoolean("enabled", true); - boolean isDataSaving = ConnectionHelper.isDataSaving(getContext()); - boolean datasaver_reminder = prefs.getBoolean(key, true); - grpDataSaver.setVisibility(enabled && isDataSaving && datasaver_reminder ? View.VISIBLE : View.GONE); - } + ("enabled".equals(key) || "datasaver_reminder".equals(key))) + new SimpleTask() { + @Override + protected Boolean onExecute(Context context, Bundle args) { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + + boolean isDataSaving = ConnectionHelper.isDataSaving(getContext()); + if (!isDataSaving) { + prefs.edit().putBoolean("datasaver_reminder", true).apply(); + return false; + } + + boolean enabled = prefs.getBoolean("enabled", true); + boolean reminder = prefs.getBoolean("datasaver_reminder", true); + + if (!enabled || !reminder) + return false; + + DB db = DB.getInstance(context); + List accounts = db.account().getSynchronizingAccounts(null); + if (accounts == null || accounts.size() == 0) + return false; + + boolean ondemand = true; + for (EntityAccount account : accounts) + if (!account.ondemand) { + ondemand = false; + break; + } + + if (ondemand) + return false; + + return true; + } + + @Override + protected void onExecuted(Bundle args, Boolean show) { + grpDataSaver.setVisibility(Boolean.TRUE.equals(show) ? View.VISIBLE : View.GONE); + } + + @Override + protected void onException(Bundle args, Throwable ex) { + grpDataSaver.setVisibility(View.GONE); + } + }.serial().execute(this, new Bundle(), "datasaver"); if (grpSupport != null && ("pro".equals(key) || "banner_hidden".equals(key))) {