diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java index f2f1fffc25..1ec6da1675 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptions.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java @@ -32,6 +32,9 @@ import android.os.Build; import android.os.Bundle; import android.preference.PreferenceManager; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -47,6 +50,7 @@ import androidx.annotation.Nullable; import androidx.appcompat.widget.SwitchCompat; import androidx.constraintlayout.widget.Group; import androidx.fragment.app.FragmentActivity; +import androidx.fragment.app.FragmentTransaction; import static android.app.Activity.RESULT_OK; @@ -86,6 +90,15 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS private Group grpNotification; + private final static String[] ADVANCED_OPTIONS = new String[]{ + "enabled", "updates", + "metered", "download", + "unified", "threading", "compact", "avatars", "identicons", "preview", "addresses", + "pull", "swipe", "actionbar", "autoclose", "autonext", + "autoread", "collapse", "automove", "confirm", "sender", "autoresize", "autosend", + "light", "sound", "debug" + }; + @Override @Nullable public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @@ -134,7 +147,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - swEnabled.setChecked(prefs.getBoolean("enabled", true)); swEnabled.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -143,16 +155,13 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swUpdates.setChecked(prefs.getBoolean("updates", true)); swUpdates.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("updates", checked).apply(); } }); - swUpdates.setVisibility(Helper.isPlayStoreInstall(getContext()) ? View.GONE : View.VISIBLE); - swMetered.setChecked(prefs.getBoolean("metered", true)); swMetered.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -161,16 +170,10 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - int download = prefs.getInt("download", 32768); - final int[] values = getResources().getIntArray(R.array.downloadValues); - for (int i = 0; i < values.length; i++) - if (values[i] == download) { - spDownload.setSelection(i); - break; - } spDownload.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { + int[] values = getResources().getIntArray(R.array.downloadValues); prefs.edit().putInt("download", values[position]).apply(); } @@ -180,7 +183,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swUnified.setChecked(prefs.getBoolean("unified", true)); swUnified.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -188,7 +190,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swThreading.setChecked(prefs.getBoolean("threading", true)); swThreading.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -196,7 +197,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swCompact.setChecked(prefs.getBoolean("compact", false)); swCompact.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -205,7 +205,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAvatars.setChecked(prefs.getBoolean("avatars", true)); swAvatars.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -213,7 +212,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swIdenticons.setChecked(prefs.getBoolean("identicons", false)); swIdenticons.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -221,7 +219,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swPreview.setChecked(prefs.getBoolean("preview", false)); swPreview.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -261,7 +258,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAddresses.setChecked(prefs.getBoolean("addresses", true)); swAddresses.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -269,7 +265,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swPull.setChecked(prefs.getBoolean("pull", true)); swPull.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -277,7 +272,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swSwipe.setChecked(prefs.getBoolean("swipe", true)); swSwipe.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -285,7 +279,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swActionbar.setChecked(prefs.getBoolean("actionbar", true)); swActionbar.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -293,7 +286,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAutoClose.setChecked(prefs.getBoolean("autoclose", true)); swAutoClose.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -302,16 +294,13 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAutoNext.setChecked(prefs.getBoolean("autonext", false)); swAutoNext.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { prefs.edit().putBoolean("autonext", checked).apply(); } }); - swAutoNext.setEnabled(!swAutoClose.isChecked()); - swAutoRead.setChecked(prefs.getBoolean("autoread", false)); swAutoRead.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -319,7 +308,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swCollapse.setChecked(prefs.getBoolean("collapse", false)); swCollapse.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -327,7 +315,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAutoMove.setChecked(!prefs.getBoolean("automove", false)); swAutoMove.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -335,7 +322,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swConfirm.setChecked(prefs.getBoolean("confirm", false)); swConfirm.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -343,7 +329,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swSender.setChecked(prefs.getBoolean("sender", false)); swSender.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -351,7 +336,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAutoResize.setChecked(prefs.getBoolean("autoresize", true)); swAutoResize.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -359,7 +343,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swAutoSend.setChecked(!prefs.getBoolean("autosend", false)); swAutoSend.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -367,7 +350,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swLight.setChecked(prefs.getBoolean("light", false)); swLight.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -389,7 +371,6 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - swDebug.setChecked(prefs.getBoolean("debug", false)); swDebug.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { @@ -398,7 +379,7 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS } }); - grpNotification.setVisibility(BuildConfig.DEBUG || Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ? View.VISIBLE : View.GONE); + setOptions(); PreferenceManager.getDefaultSharedPreferences(getContext()).registerOnSharedPreferenceChangeListener(this); @@ -423,6 +404,84 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS super.onPause(); } + @Override + public void onDestroyView() { + PreferenceManager.getDefaultSharedPreferences(getContext()).unregisterOnSharedPreferenceChangeListener(this); + super.onDestroyView(); + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.menu_options, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_default: + onMenuDefault(); + return true; + default: + return super.onOptionsItemSelected(item); + } + } + + private void onMenuDefault() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + SharedPreferences.Editor editor = prefs.edit(); + for (String option : ADVANCED_OPTIONS) + editor.remove(option); + editor.apply(); + + setOptions(); + } + + private void setOptions() { + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + + swEnabled.setChecked(prefs.getBoolean("enabled", true)); + swUpdates.setChecked(prefs.getBoolean("updates", true)); + swUpdates.setVisibility(Helper.isPlayStoreInstall(getContext()) ? View.GONE : View.VISIBLE); + + swMetered.setChecked(prefs.getBoolean("metered", true)); + + int download = prefs.getInt("download", 32768); + int[] values = getResources().getIntArray(R.array.downloadValues); + for (int i = 0; i < values.length; i++) + if (values[i] == download) { + spDownload.setSelection(i); + break; + } + + swUnified.setChecked(prefs.getBoolean("unified", true)); + swThreading.setChecked(prefs.getBoolean("threading", true)); + swCompact.setChecked(prefs.getBoolean("compact", false)); + swAvatars.setChecked(prefs.getBoolean("avatars", true)); + swIdenticons.setChecked(prefs.getBoolean("identicons", false)); + swPreview.setChecked(prefs.getBoolean("preview", false)); + swAddresses.setChecked(prefs.getBoolean("addresses", true)); + + swPull.setChecked(prefs.getBoolean("pull", true)); + swSwipe.setChecked(prefs.getBoolean("swipe", true)); + swActionbar.setChecked(prefs.getBoolean("actionbar", true)); + swAutoClose.setChecked(prefs.getBoolean("autoclose", true)); + swAutoNext.setChecked(prefs.getBoolean("autonext", false)); + swAutoNext.setEnabled(!swAutoClose.isChecked()); + swAutoRead.setChecked(prefs.getBoolean("autoread", false)); + swCollapse.setChecked(prefs.getBoolean("collapse", false)); + swAutoMove.setChecked(!prefs.getBoolean("automove", false)); + swConfirm.setChecked(prefs.getBoolean("confirm", false)); + swSender.setChecked(prefs.getBoolean("sender", false)); + swAutoResize.setChecked(prefs.getBoolean("autoresize", true)); + swAutoSend.setChecked(!prefs.getBoolean("autosend", false)); + + swLight.setChecked(prefs.getBoolean("light", false)); + swDebug.setChecked(prefs.getBoolean("debug", false)); + + grpNotification.setVisibility(BuildConfig.DEBUG || Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O ? View.VISIBLE : View.GONE); + } + private ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { @@ -480,10 +539,4 @@ public class FragmentOptions extends FragmentEx implements SharedPreferences.OnS if ("enabled".equals(key)) swEnabled.setChecked(prefs.getBoolean(key, true)); } - - @Override - public void onDestroyView() { - PreferenceManager.getDefaultSharedPreferences(getContext()).unregisterOnSharedPreferenceChangeListener(this); - super.onDestroyView(); - } } diff --git a/app/src/main/res/menu/menu_options.xml b/app/src/main/res/menu/menu_options.xml new file mode 100644 index 0000000000..363b338298 --- /dev/null +++ b/app/src/main/res/menu/menu_options.xml @@ -0,0 +1,8 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7c4be3bd68..7d4b86d7d4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -112,6 +112,7 @@ Light theme Dark theme Black theme + Restore defaults Advanced options