diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index aa9657a54f..ac5e7a9a36 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -724,23 +724,32 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB } private void checkUpdate(boolean always) { - if (Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(this)) + if (!BuildConfig.DEBUG && + (Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(this))) return; long now = new Date().getTime(); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - if (!always && !prefs.getBoolean("updates", true)) + boolean updates = prefs.getBoolean("updates", true); + boolean updates_main = prefs.getBoolean("updates_main", false); + long last_update_check = prefs.getLong("last_update_check", 0); + + if (!always && !updates) return; - if (!always && prefs.getLong("last_update_check", 0) + UPDATE_INTERVAL > now) + if (!always && last_update_check + UPDATE_INTERVAL > now) return; + prefs.edit().putLong("last_update_check", now).apply(); Bundle args = new Bundle(); args.putBoolean("always", always); + args.putBoolean("updates_main", updates_main); new SimpleTask() { @Override protected UpdateInfo onExecute(Context context, Bundle args) throws Throwable { + boolean updates_main = args.getBoolean("updates_main"); + StringBuilder response = new StringBuilder(); HttpsURLConnection urlConnection = null; try { @@ -774,6 +783,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB JSONObject jroot = new JSONObject(response.toString()); + if (!jroot.has("name") || jroot.isNull("name")) + throw new IOException("name field missing"); if (!jroot.has("tag_name") || jroot.isNull("tag_name")) throw new IOException("tag_name field missing"); if (!jroot.has("html_url") || jroot.isNull("html_url")) @@ -781,6 +792,10 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB if (!jroot.has("assets") || jroot.isNull("assets")) throw new IOException("assets section missing"); + String name = jroot.getString("name"); + if (updates_main && !name.contains("*")) + return null; + // Get update info UpdateInfo info = new UpdateInfo(); info.tag_name = jroot.getString("tag_name"); @@ -791,8 +806,8 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB for (int i = 0; i < jassets.length(); i++) { JSONObject jasset = jassets.getJSONObject(i); if (jasset.has("name") && !jasset.isNull("name")) { - String name = jasset.getString("name"); - if (name.endsWith(".apk")) { + String filename = jasset.getString("name"); + if (filename.endsWith(".apk")) { Log.i("Latest version=" + info.tag_name); if (BuildConfig.VERSION_NAME.equals(info.tag_name)) return null; @@ -812,6 +827,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB @Override protected void onExecuted(Bundle args, UpdateInfo info) { boolean always = args.getBoolean("always"); + if (info == null) { if (always) ToastEx.makeText(ActivityView.this, BuildConfig.VERSION_NAME, Toast.LENGTH_LONG).show(); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index f5064f8aec..1181ffb549 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -59,6 +59,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private SwitchCompat swWatchdog; private SwitchCompat swOptimize; private SwitchCompat swUpdates; + private SwitchCompat swUpdatesMain; private SwitchCompat swExperiments; private TextView tvExperimentsHint; private SwitchCompat swCrashReports; @@ -74,10 +75,11 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc private TextView tvStorageSpace; private TextView tvFingerprint; + private Group grpUpdates; private Group grpDebug; private final static String[] RESET_OPTIONS = new String[]{ - "fts", "english", "watchdog", "auto_optimize", "updates", "experiments", "crash_reports", "debug" + "fts", "english", "watchdog", "auto_optimize", "updates", "updates_main", "experiments", "crash_reports", "debug" }; private final static String[] RESET_QUESTIONS = new String[]{ @@ -105,6 +107,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swWatchdog = view.findViewById(R.id.swWatchdog); swOptimize = view.findViewById(R.id.swOptimize); swUpdates = view.findViewById(R.id.swUpdates); + swUpdatesMain = view.findViewById(R.id.swUpdatesMain); swExperiments = view.findViewById(R.id.swExperiments); tvExperimentsHint = view.findViewById(R.id.tvExperimentsHint); swCrashReports = view.findViewById(R.id.swCrashReports); @@ -120,6 +123,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc tvStorageSpace = view.findViewById(R.id.tvStorageSpace); tvFingerprint = view.findViewById(R.id.tvFingerprint); + grpUpdates = view.findViewById(R.id.grpUpdates); grpDebug = view.findViewById(R.id.grpDebug); setOptions(); @@ -207,6 +211,14 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc NotificationManager nm = (NotificationManager) getContext().getSystemService(Context.NOTIFICATION_SERVICE); nm.cancel(Helper.NOTIFICATION_UPDATE); } + swUpdatesMain.setEnabled(checked); + } + }); + + swUpdatesMain.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { + prefs.edit().putBoolean("updates_main", checked).apply(); } }); @@ -384,9 +396,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc swWatchdog.setChecked(prefs.getBoolean("watchdog", true)); swOptimize.setChecked(prefs.getBoolean("auto_optimize", false)); swUpdates.setChecked(prefs.getBoolean("updates", true)); - swUpdates.setVisibility( - Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(getContext()) - ? View.GONE : View.VISIBLE); + swUpdatesMain.setChecked(prefs.getBoolean("updates_main", false)); + swUpdatesMain.setEnabled(swUpdates.isChecked()); swExperiments.setChecked(prefs.getBoolean("experiments", false)); swCrashReports.setChecked(prefs.getBoolean("crash_reports", false)); tvUuid.setText(prefs.getString("uuid", null)); @@ -403,6 +414,10 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc Helper.humanReadableByteCount(Helper.getTotalStorageSpace(), true))); tvFingerprint.setText(Helper.getFingerprint(getContext())); + grpUpdates.setVisibility(!BuildConfig.DEBUG && + (Helper.isPlayStoreInstall() || !Helper.hasValidFingerprint(getContext())) + ? View.GONE : View.VISIBLE); + grpDebug.setVisibility(swDebug.isChecked() || BuildConfig.DEBUG ? View.VISIBLE : View.GONE); } diff --git a/app/src/main/res/layout/fragment_options_misc.xml b/app/src/main/res/layout/fragment_options_misc.xml index a1e5f61616..088819000f 100644 --- a/app/src/main/res/layout/fragment_options_misc.xml +++ b/app/src/main/res/layout/fragment_options_misc.xml @@ -146,6 +146,17 @@ app:layout_constraintTop_toBottomOf="@id/swOptimize" app:switchPadding="12dp" /> + + + + Periodically check if FairEmail is still active Automatically optimize settings Check for updates + Check for main updates only Try experimental features Send error reports Debug mode