From 7ef02063435c38db75f2eb9459e3971bd3ee3c5a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Mon, 15 Jul 2024 13:53:21 +0200 Subject: [PATCH] modernize auto download values --- .../conversations/ui/TimePreference.java | 98 ------------------- .../settings/AttachmentsSettingsFragment.java | 18 +++- .../settings/BackupSettingsFragment.java | 14 +-- .../settings/SecuritySettingsFragment.java | 20 ++-- .../settings/XmppPreferenceFragment.java | 33 +++++-- src/main/res/values/arrays.xml | 14 +-- src/main/res/xml/preferences_attachments.xml | 2 - 7 files changed, 57 insertions(+), 142 deletions(-) delete mode 100644 src/main/java/eu/siacs/conversations/ui/TimePreference.java diff --git a/src/main/java/eu/siacs/conversations/ui/TimePreference.java b/src/main/java/eu/siacs/conversations/ui/TimePreference.java deleted file mode 100644 index a7e53ca383af2169a4294e2e467f723c047f4e6a..0000000000000000000000000000000000000000 --- a/src/main/java/eu/siacs/conversations/ui/TimePreference.java +++ /dev/null @@ -1,98 +0,0 @@ -package eu.siacs.conversations.ui; - -import android.content.Context; -import android.content.res.TypedArray; -import android.preference.DialogPreference; -import android.preference.Preference; -import android.util.AttributeSet; -import android.view.View; -import android.widget.TimePicker; - -import java.text.DateFormat; -import java.util.Calendar; -import java.util.Date; - - -public class TimePreference extends DialogPreference implements Preference.OnPreferenceChangeListener { - private TimePicker picker = null; - public final static long DEFAULT_VALUE = 0; - - public TimePreference(final Context context, final AttributeSet attrs) { - super(context, attrs, 0); - this.setOnPreferenceChangeListener(this); - } - - protected void setTime(final long time) { - persistLong(time); - notifyDependencyChange(shouldDisableDependents()); - notifyChanged(); - updateSummary(time); - } - - private void updateSummary(final long time) { - final DateFormat dateFormat = android.text.format.DateFormat.getTimeFormat(getContext()); - final Date date = minutesToCalender(time).getTime(); - setSummary(dateFormat.format(date.getTime())); - } - - @Override - protected View onCreateDialogView() { - picker = new TimePicker(getContext()); - picker.setIs24HourView(android.text.format.DateFormat.is24HourFormat(getContext())); - return picker; - } - - @SuppressWarnings("NullableProblems") - @Override - protected void onBindDialogView(final View v) { - super.onBindDialogView(v); - long time = getPersistedLong(DEFAULT_VALUE); - - picker.setCurrentHour((int) ((time % (24 * 60)) / 60)); - picker.setCurrentMinute((int) ((time % (24 * 60)) % 60)); - } - - @Override - protected void onDialogClosed(final boolean positiveResult) { - super.onDialogClosed(positiveResult); - - if (positiveResult) { - setTime(picker.getCurrentHour() * 60 + picker.getCurrentMinute()); - } - } - - private static Calendar minutesToCalender(long time) { - final Calendar c = Calendar.getInstance(); - c.set(Calendar.HOUR_OF_DAY, (int) ((time % (24 * 60)) / 60)); - c.set(Calendar.MINUTE, (int) ((time % (24 * 60)) % 60)); - return c; - } - - public static long minutesToTimestamp(long time) { - return minutesToCalender(time).getTimeInMillis(); - } - - @Override - protected Object onGetDefaultValue(final TypedArray a, final int index) { - return a.getInteger(index, 0); - } - - @Override - protected void onSetInitialValue(final boolean restorePersistedValue, final Object defaultValue) { - long time; - if (defaultValue instanceof Long) { - time = restorePersistedValue ? getPersistedLong((Long) defaultValue) : (Long) defaultValue; - } else { - time = restorePersistedValue ? getPersistedLong(DEFAULT_VALUE) : DEFAULT_VALUE; - } - - setTime(time); - updateSummary(time); - } - - @Override - public boolean onPreferenceChange(final Preference preference, final Object newValue) { - ((TimePreference) preference).updateSummary((Long)newValue); - return true; - } -} diff --git a/src/main/java/eu/siacs/conversations/ui/fragment/settings/AttachmentsSettingsFragment.java b/src/main/java/eu/siacs/conversations/ui/fragment/settings/AttachmentsSettingsFragment.java index 6b05c18c5b6630f3fe04ac3af15ed62f3a0f5ce0..32bef556d3a22991879c12f758843b6ec8d1c1e0 100644 --- a/src/main/java/eu/siacs/conversations/ui/fragment/settings/AttachmentsSettingsFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/fragment/settings/AttachmentsSettingsFragment.java @@ -3,15 +3,31 @@ package eu.siacs.conversations.ui.fragment.settings; import android.os.Bundle; import androidx.annotation.Nullable; +import androidx.preference.ListPreference; import androidx.preference.PreferenceFragmentCompat; import eu.siacs.conversations.R; +import eu.siacs.conversations.utils.UIHelper; -public class AttachmentsSettingsFragment extends PreferenceFragmentCompat { +public class AttachmentsSettingsFragment extends XmppPreferenceFragment { @Override public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { setPreferencesFromResource(R.xml.preferences_attachments, rootKey); + final ListPreference autoAcceptFileSize = findPreference("auto_accept_file_size"); + if (autoAcceptFileSize == null) { + throw new IllegalStateException("The preference resource file is missing preferences"); + } + setValues( + autoAcceptFileSize, + R.array.file_size_values, + value -> { + if (value <= 0) { + return getString(R.string.never); + } else { + return UIHelper.filesizeToString(value); + } + }); } @Override diff --git a/src/main/java/eu/siacs/conversations/ui/fragment/settings/BackupSettingsFragment.java b/src/main/java/eu/siacs/conversations/ui/fragment/settings/BackupSettingsFragment.java index f78577656d619357219dd94068dd67d968946464..739598a69009561a7f6a6bec4076fc6530d31c32 100644 --- a/src/main/java/eu/siacs/conversations/ui/fragment/settings/BackupSettingsFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/fragment/settings/BackupSettingsFragment.java @@ -71,16 +71,10 @@ public class BackupSettingsFragment extends XmppPreferenceFragment { R.string.pref_create_backup_summary, FileBackend.getBackupDirectory(requireContext()).getAbsolutePath())); createOneOffBackup.setOnPreferenceClickListener(this::onBackupPreferenceClicked); - final int[] choices = getResources().getIntArray(R.array.recurring_backup_values); - final CharSequence[] entries = new CharSequence[choices.length]; - final CharSequence[] entryValues = new CharSequence[choices.length]; - for (int i = 0; i < choices.length; ++i) { - entryValues[i] = String.valueOf(choices[i]); - entries[i] = timeframeValueToName(requireContext(), choices[i]); - } - recurringBackup.setEntries(entries); - recurringBackup.setEntryValues(entryValues); - recurringBackup.setSummaryProvider(new TimeframeSummaryProvider()); + setValues( + recurringBackup, + R.array.recurring_backup_values, + value -> timeframeValueToName(requireContext(), value)); } @Override diff --git a/src/main/java/eu/siacs/conversations/ui/fragment/settings/SecuritySettingsFragment.java b/src/main/java/eu/siacs/conversations/ui/fragment/settings/SecuritySettingsFragment.java index 0ccf2679e17d3069093148d73ba31af3dba127fc..2fa1bc3bee2e624d66a63af5991e8729e2d0dec4 100644 --- a/src/main/java/eu/siacs/conversations/ui/fragment/settings/SecuritySettingsFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/fragment/settings/SecuritySettingsFragment.java @@ -4,6 +4,7 @@ import android.content.DialogInterface; import android.os.Bundle; import android.widget.Toast; +import androidx.annotation.ArrayRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -11,7 +12,9 @@ import androidx.preference.ListPreference; import androidx.preference.Preference; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.common.base.Function; import com.google.common.base.Strings; +import com.google.common.primitives.Ints; import eu.siacs.conversations.AppSettings; import eu.siacs.conversations.R; @@ -21,6 +24,7 @@ import eu.siacs.conversations.services.MemorizingTrustManager; import java.security.KeyStoreException; import java.util.ArrayList; import java.util.Collections; +import java.util.concurrent.Callable; public class SecuritySettingsFragment extends XmppPreferenceFragment { @@ -36,19 +40,12 @@ public class SecuritySettingsFragment extends XmppPreferenceFragment { throw new IllegalStateException("The preference resource file is missing preferences"); } omemo.setSummaryProvider(new OmemoSummaryProvider()); - final int[] choices = getResources().getIntArray(R.array.automatic_message_deletion_values); - final CharSequence[] entries = new CharSequence[choices.length]; - final CharSequence[] entryValues = new CharSequence[choices.length]; - for (int i = 0; i < choices.length; ++i) { - entryValues[i] = String.valueOf(choices[i]); - entries[i] = timeframeValueToName(requireContext(), choices[i]); - } - automaticMessageDeletion.setEntries(entries); - automaticMessageDeletion.setEntryValues(entryValues); - automaticMessageDeletion.setSummaryProvider(new TimeframeSummaryProvider()); + setValues( + automaticMessageDeletion, + R.array.automatic_message_deletion_values, + value -> timeframeValueToName(requireContext(), value)); } - @Override protected void onSharedPreferenceChanged(@NonNull String key) { super.onSharedPreferenceChanged(key); @@ -151,7 +148,6 @@ public class SecuritySettingsFragment extends XmppPreferenceFragment { .show(); } - private static class OmemoSummaryProvider implements Preference.SummaryProvider { diff --git a/src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java b/src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java index 76364526d187044915c099dd81dac15a04188ba4..43efde3872cddcc0cd927c95eaa11871d5ebbebb 100644 --- a/src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/fragment/settings/XmppPreferenceFragment.java @@ -4,12 +4,14 @@ import android.content.Context; import android.content.SharedPreferences; import android.util.Log; +import androidx.annotation.ArrayRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; +import com.google.common.base.Function; import com.google.common.base.Strings; import com.google.common.primitives.Ints; @@ -101,14 +103,29 @@ public abstract class XmppPreferenceFragment extends PreferenceFragmentCompat { } } - protected static class TimeframeSummaryProvider - implements Preference.SummaryProvider { - - @Nullable - @Override - public CharSequence provideSummary(@NonNull ListPreference preference) { - final Integer value = Ints.tryParse(Strings.nullToEmpty(preference.getValue())); - return timeframeValueToName(preference.getContext(), value == null ? 0 : value); + protected void setValues( + final ListPreference listPreference, + @ArrayRes int resId, + final Function valueToName) { + final int[] choices = getResources().getIntArray(resId); + final CharSequence[] entries = new CharSequence[choices.length]; + final CharSequence[] entryValues = new CharSequence[choices.length]; + for (int i = 0; i < choices.length; ++i) { + final int value = choices[i]; + entryValues[i] = String.valueOf(choices[i]); + entries[i] = valueToName.apply(value); } + listPreference.setEntries(entries); + listPreference.setEntryValues(entryValues); + listPreference.setSummaryProvider( + new Preference.SummaryProvider() { + @Nullable + @Override + public CharSequence provideSummary(@NonNull ListPreference preference) { + final Integer value = + Ints.tryParse(Strings.nullToEmpty(preference.getValue())); + return valueToName.apply(value == null ? 0 : value); + } + }); } } diff --git a/src/main/res/values/arrays.xml b/src/main/res/values/arrays.xml index 1c00e9e737efd498898eee6e120dd19477d260d7..47fbfb81f361574db8ef11b3b4a2643744eea490 100644 --- a/src/main/res/values/arrays.xml +++ b/src/main/res/values/arrays.xml @@ -1,22 +1,14 @@ - - @string/never - 256 KiB - 512 KiB - 1 MiB - 5 MiB - 10 MiB - - + 0 - 262144 524288 1048576 5242880 10485760 - + 52428800 + 1800 diff --git a/src/main/res/xml/preferences_attachments.xml b/src/main/res/xml/preferences_attachments.xml index 7577fb2eaf99c8417ea94f73665f96425cf5c599..23c741b3a3a7092a6e1c112e1b15ba225cd078d1 100644 --- a/src/main/res/xml/preferences_attachments.xml +++ b/src/main/res/xml/preferences_attachments.xml @@ -22,8 +22,6 @@