ui: Use a DropDownPreference for auto freeze delay

and limit maximum to 5 minutes while we are at it
This commit is contained in:
Peter Cai 2024-10-05 20:17:04 -04:00
parent 9e0f2306a8
commit da45e570ca
3 changed files with 18 additions and 30 deletions

View file

@ -12,6 +12,7 @@ import android.provider.Settings;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.CheckBoxPreference;
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
@ -20,6 +21,8 @@ import net.typeblog.shelter.services.IShelterService;
import net.typeblog.shelter.util.SettingsManager;
import net.typeblog.shelter.util.Utility;
import java.util.Arrays;
public class SettingsFragment extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
private static final String SETTINGS_VERSION = "settings_version";
private static final String SETTINGS_SOURCE_CODE = "settings_source_code";
@ -33,6 +36,8 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
private static final String SETTINGS_SKIP_FOREGROUND = "settings_dont_freeze_foreground";
private static final String SETTINGS_PAYMENT_STUB = "settings_payment_stub";
private static final int[] AUTO_FREEZE_DELAY_SECONDS = new int[]{0, 60, 2 * 60, 5 * 60};
private SettingsManager mManager = SettingsManager.getInstance();
private IShelterService mServiceWork = null;
@ -42,7 +47,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
private CheckBoxPreference mPrefSkipForeground = null;
private CheckBoxPreference mPrefPaymentStub = null;
private Preference mPrefAutoFreezeDelay = null;
private DropDownPreference mPrefAutoFreezeDelay = null;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
@ -85,7 +90,9 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
mPrefAutoFreezeService.setChecked(mManager.getAutoFreezeServiceEnabled());
mPrefAutoFreezeService.setOnPreferenceChangeListener(this);
mPrefAutoFreezeDelay = findPreference(SETTINGS_AUTO_FREEZE_DELAY);
mPrefAutoFreezeDelay.setOnPreferenceClickListener(this::openAutoFreezeDelayPicker);
mPrefAutoFreezeDelay.setOnPreferenceChangeListener(this);
mPrefAutoFreezeDelay.setEntries(Arrays.stream(AUTO_FREEZE_DELAY_SECONDS).mapToObj((it) -> getString(R.string.format_minutes, it / 60)).toArray(String[]::new));
mPrefAutoFreezeDelay.setEntryValues(Arrays.stream(AUTO_FREEZE_DELAY_SECONDS).mapToObj(String::valueOf).toArray(String[]::new));
updateAutoFreezeDelay();
mPrefSkipForeground = (CheckBoxPreference) findPreference(SETTINGS_SKIP_FOREGROUND);
mPrefSkipForeground.setChecked(mManager.getSkipForegroundEnabled());
@ -116,9 +123,7 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
}
private void updateAutoFreezeDelay() {
/*mPrefAutoFreezeDelay.setSummary(TimeDurationUtil.formatMinutesSeconds(
((long) mManager.getAutoFreezeDelay()) * 1000
));*/
mPrefAutoFreezeDelay.setSummary(getString(R.string.format_minutes, mManager.getAutoFreezeDelay() / 60));
}
private boolean openSummaryUrl(Preference pref) {
@ -128,11 +133,6 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
return true;
}
private boolean openAutoFreezeDelayPicker(Preference pref) {
//new AutoFreezeDelayPickerFragment().show(getActivity().getFragmentManager(), "dialog");
return true;
}
@Override
public boolean onPreferenceChange(Preference preference, Object newState) {
if (preference == mPrefCrossProfileFileChooser) {
@ -184,6 +184,10 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
} else if (preference == mPrefAutoFreezeService) {
mManager.setAutoFreezeServiceEnabled((boolean) newState);
return true;
} else if (preference == mPrefAutoFreezeDelay) {
mManager.setAutoFreezeDelay(Integer.parseInt((String) newState));
updateAutoFreezeDelay();
return true;
} else if (preference == mPrefSkipForeground) {
boolean enabled = (boolean) newState;
if (!enabled) {
@ -230,23 +234,4 @@ public class SettingsFragment extends PreferenceFragmentCompat implements Prefer
return true;
}
}
/*public static class AutoFreezeDelayPickerFragment extends TimeDurationPickerDialogFragment {
@Override
protected long getInitialDuration() {
return ((long) SettingsManager.getInstance().getAutoFreezeDelay()) * 1000;
}
@Override
protected int setTimeUnits() {
return TimeDurationPicker.MM_SS;
}
@Override
public void onDurationSet(TimeDurationPicker view, long duration) {
long seconds = duration / 1000;
if (seconds >= Integer.MAX_VALUE) return;
SettingsManager.getInstance().setAutoFreezeDelay((int) seconds);
}
}*/
}

View file

@ -114,4 +114,7 @@
<!-- MIUI -->
<string name="miui_cannot_clone">Cloning non-system apps to another profile is currently not possible on MIUI. Please clone your system\'s app store (e.g. <b>Play Store</b>) into the other profile and then install apps from there.</string>
<string name="continue_anyway">Continue anyway</string>
<!-- Formats -->
<string name="format_minutes">%d min</string>
</resources>

View file

@ -30,7 +30,7 @@
android:title="@string/settings_auto_freeze_service"
android:summary="@string/settings_auto_freeze_service_desc" />
<androidx.preference.Preference
<androidx.preference.DropDownPreference
android:dependency="settings_auto_freeze_service"
android:key="settings_auto_freeze_delay"
android:title="@string/settings_auto_freeze_delay" />