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/drawable/seekbar_bg.9.png b/app/src/main/res/drawable/seekbar_bg.9.png
new file mode 100644
index 000000000..49f844016
Binary files /dev/null and b/app/src/main/res/drawable/seekbar_bg.9.png differ
diff --git a/app/src/main/res/drawable/seekbar_fill.9.png b/app/src/main/res/drawable/seekbar_fill.9.png
new file mode 100644
index 000000000..3d7427c0b
Binary files /dev/null and b/app/src/main/res/drawable/seekbar_fill.9.png differ
diff --git a/app/src/main/res/drawable/seekbar_progress.xml b/app/src/main/res/drawable/seekbar_progress.xml
new file mode 100644
index 000000000..72c15e8c5
--- /dev/null
+++ b/app/src/main/res/drawable/seekbar_progress.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/seekbar_thumb.xml b/app/src/main/res/drawable/seekbar_thumb.xml
new file mode 100644
index 000000000..23a860ce6
--- /dev/null
+++ b/app/src/main/res/drawable/seekbar_thumb.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/seekbar_tickmark.xml b/app/src/main/res/drawable/seekbar_tickmark.xml
new file mode 100644
index 000000000..7c11d874e
--- /dev/null
+++ b/app/src/main/res/drawable/seekbar_tickmark.xml
@@ -0,0 +1,11 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_seekbar.xml b/app/src/main/res/layout/preference_seekbar.xml
index 87b4c0ccc..06356ad03 100644
--- a/app/src/main/res/layout/preference_seekbar.xml
+++ b/app/src/main/res/layout/preference_seekbar.xml
@@ -46,8 +46,9 @@
android:layout_below="@android:id/summary"
android:layout_alignStart="@android:id/summary"
android:layout_alignLeft="@android:id/summary"
- android:thumb="@android:drawable/radiobutton_off_background"
+ android:progressDrawable="@drawable/seekbar_progress"
+ android:thumb="@drawable/seekbar_thumb"
android:padding="16dip"
- android:theme="@style/Widget.AppCompat.SeekBar.Discrete"/>
+ android:theme="@style/DiscreteSeekBar"/>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index d34733560..5f5980f83 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -317,4 +317,8 @@
+
+
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"/>
-