From da856786bae50ae925492420b003f59eeb27b349 Mon Sep 17 00:00:00 2001 From: ByteHamster Date: Fri, 8 Jun 2018 20:00:45 +0200 Subject: [PATCH] Live updates --- .../fdroid/views/LiveSeekBarPreference.java | 77 +++++++++++++++++++ .../views/fragments/PreferencesFragment.java | 31 ++++++-- app/src/main/res/xml/preferences.xml | 6 +- 3 files changed, 105 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java diff --git a/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java new file mode 100644 index 000000000..3aa98d3bc --- /dev/null +++ b/app/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java @@ -0,0 +1,77 @@ +package org.fdroid.fdroid.views; + +import android.content.Context; +import android.support.v7.preference.PreferenceViewHolder; +import android.support.v7.preference.SeekBarPreference; +import android.util.AttributeSet; +import android.widget.SeekBar; +import org.fdroid.fdroid.R; + +public class LiveSeekBarPreference extends SeekBarPreference { + private Runnable progressChangedListener; + private boolean trackingTouch; + private int value = -1; + + @SuppressWarnings("unused") + public LiveSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @SuppressWarnings("unused") + public LiveSeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @SuppressWarnings("unused") + public LiveSeekBarPreference(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @SuppressWarnings("unused") + public LiveSeekBarPreference(Context context) { + super(context); + } + + @Override + public void onBindViewHolder(PreferenceViewHolder holder) { + super.onBindViewHolder(holder); + + SeekBar seekbar = holder.itemView.findViewById(R.id.seekbar); + seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + value = progress; + if (progressChangedListener != null) { + progressChangedListener.run(); + } + value = progress; + if (fromUser && !trackingTouch) { + persistInt(value); + } + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + trackingTouch = true; + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + trackingTouch = false; + persistInt(value); + } + }); + seekbar.setProgress(value); + } + + public int getValue() { + if (value == -1) { + value = super.getValue(); + } + return value; + } + + public void setProgressChangedListener(Runnable listener) { + progressChangedListener = listener; + } +} diff --git a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java index ab2dc6936..8b54dea24 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java +++ b/app/src/main/java/org/fdroid/fdroid/views/fragments/PreferencesFragment.java @@ -53,6 +53,7 @@ import org.fdroid.fdroid.Utils; import org.fdroid.fdroid.data.RepoProvider; import org.fdroid.fdroid.installer.InstallHistoryService; import org.fdroid.fdroid.installer.PrivilegedInstaller; +import org.fdroid.fdroid.views.LiveSeekBarPreference; public class PreferencesFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -90,9 +91,9 @@ public class PreferencesFragment extends PreferenceFragment private static final int REQUEST_INSTALL_ORBOT = 0x1234; - private SeekBarPreference overWifiSeekBar; - private SeekBarPreference overDataSeekBar; - private SeekBarPreference updateIntervalSeekBar; + private LiveSeekBarPreference overWifiSeekBar; + private LiveSeekBarPreference overDataSeekBar; + private LiveSeekBarPreference updateIntervalSeekBar; private SwitchPreference enableProxyCheckPref; private SwitchPreference useTorCheckPref; private Preference updateAutoDownloadPref; @@ -113,12 +114,30 @@ public class PreferencesFragment extends PreferenceFragment updateAutoDownloadPref = findPreference(Preferences.PREF_AUTO_DOWNLOAD_INSTALL_UPDATES); updatePrivilegedExtensionPref = findPreference(Preferences.PREF_UNINSTALL_PRIVILEGED_APP); - overWifiSeekBar = (SeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI); + overWifiSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI); overWifiPrevious = overWifiSeekBar.getValue(); - overDataSeekBar = (SeekBarPreference) findPreference(Preferences.PREF_OVER_DATA); + overWifiSeekBar.setProgressChangedListener(new Runnable() { + @Override + public void run() { + updateSummary(overWifiSeekBar.getKey(), false); + } + }); + overDataSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_DATA); overDataPrevious = overDataSeekBar.getValue(); - updateIntervalSeekBar = (SeekBarPreference) findPreference(Preferences.PREF_UPDATE_INTERVAL); + overDataSeekBar.setProgressChangedListener(new Runnable() { + @Override + public void run() { + updateSummary(overDataSeekBar.getKey(), false); + } + }); + updateIntervalSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_UPDATE_INTERVAL); updateIntervalPrevious = updateIntervalSeekBar.getValue(); + updateIntervalSeekBar.setProgressChangedListener(new Runnable() { + @Override + public void run() { + updateSummary(updateIntervalSeekBar.getKey(), false); + } + }); ListPreference languagePref = (ListPreference) findPreference(Preferences.PREF_LANGUAGE); if (Build.VERSION.SDK_INT >= 24) { diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index efe9b853b..75d6dd58e 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -27,11 +27,11 @@ - - @@ -40,7 +40,7 @@ android:summary="@string/update_auto_download_summary" android:defaultValue="false" android:key="updateAutoDownload"/> -