Update TextView directly

This commit is contained in:
ByteHamster 2018-06-10 22:12:06 +02:00
parent c7e692e9e5
commit 1c89076393
2 changed files with 37 additions and 24 deletions

View File

@ -5,10 +5,11 @@ import android.support.v7.preference.PreferenceViewHolder;
import android.support.v7.preference.SeekBarPreference; import android.support.v7.preference.SeekBarPreference;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.TextView;
import org.fdroid.fdroid.R; import org.fdroid.fdroid.R;
public class LiveSeekBarPreference extends SeekBarPreference { public class LiveSeekBarPreference extends SeekBarPreference {
private Runnable progressChangedRunnable; private SeekBarLiveUpdater seekBarLiveUpdater;
private boolean trackingTouch; private boolean trackingTouch;
private int value = -1; private int value = -1;
@ -33,7 +34,7 @@ public class LiveSeekBarPreference extends SeekBarPreference {
} }
@Override @Override
public void onBindViewHolder(PreferenceViewHolder holder) { public void onBindViewHolder(final PreferenceViewHolder holder) {
super.onBindViewHolder(holder); super.onBindViewHolder(holder);
SeekBar seekbar = holder.itemView.findViewById(R.id.seekbar); SeekBar seekbar = holder.itemView.findViewById(R.id.seekbar);
@ -41,8 +42,12 @@ public class LiveSeekBarPreference extends SeekBarPreference {
@Override @Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
value = progress; value = progress;
if (progressChangedRunnable != null) { if (seekBarLiveUpdater != null) {
progressChangedRunnable.run(); String message = seekBarLiveUpdater.seekBarUpdated(value);
TextView summary = holder.itemView.findViewById(android.R.id.summary);
if (summary != null) {
summary.setText(message);
}
} }
if (fromUser && !trackingTouch) { if (fromUser && !trackingTouch) {
persistInt(value); persistInt(value);
@ -77,7 +82,11 @@ public class LiveSeekBarPreference extends SeekBarPreference {
return value; return value;
} }
public void setProgressChangedRunnable(Runnable runnable) { public void setSeekBarLiveUpdater(SeekBarLiveUpdater updater) {
progressChangedRunnable = runnable; seekBarLiveUpdater = updater;
}
public interface SeekBarLiveUpdater {
String seekBarUpdated(int position);
} }
} }

View File

@ -116,26 +116,26 @@ public class PreferencesFragment extends PreferenceFragment
overWifiSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI); overWifiSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_WIFI);
overWifiPrevious = overWifiSeekBar.getValue(); overWifiPrevious = overWifiSeekBar.getValue();
overWifiSeekBar.setProgressChangedRunnable(new Runnable() { overWifiSeekBar.setSeekBarLiveUpdater(new LiveSeekBarPreference.SeekBarLiveUpdater() {
@Override @Override
public void run() { public String seekBarUpdated(int position) {
updateSummary(overWifiSeekBar.getKey(), false); return getNetworkSeekBarSummary(position);
} }
}); });
overDataSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_DATA); overDataSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_OVER_DATA);
overDataPrevious = overDataSeekBar.getValue(); overDataPrevious = overDataSeekBar.getValue();
overDataSeekBar.setProgressChangedRunnable(new Runnable() { overDataSeekBar.setSeekBarLiveUpdater(new LiveSeekBarPreference.SeekBarLiveUpdater() {
@Override @Override
public void run() { public String seekBarUpdated(int position) {
updateSummary(overDataSeekBar.getKey(), false); return getNetworkSeekBarSummary(position);
} }
}); });
updateIntervalSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_UPDATE_INTERVAL); updateIntervalSeekBar = (LiveSeekBarPreference) findPreference(Preferences.PREF_UPDATE_INTERVAL);
updateIntervalPrevious = updateIntervalSeekBar.getValue(); updateIntervalPrevious = updateIntervalSeekBar.getValue();
updateIntervalSeekBar.setProgressChangedRunnable(new Runnable() { updateIntervalSeekBar.setSeekBarLiveUpdater(new LiveSeekBarPreference.SeekBarLiveUpdater() {
@Override @Override
public void run() { public String seekBarUpdated(int position) {
updateSummary(updateIntervalSeekBar.getKey(), false); return getString(UPDATE_INTERVAL_NAMES[position]);
} }
}); });
@ -172,17 +172,21 @@ public class PreferencesFragment extends PreferenceFragment
} }
} }
private String getNetworkSeekBarSummary(int position) {
if (position == 0) {
return getString(R.string.over_network_never_summary);
} else if (position == 1) {
return getString(R.string.over_network_on_demand_summary);
} else if (position == 2) {
return getString(R.string.over_network_always_summary);
} else {
throw new IllegalArgumentException("Unknown seekbar position");
}
}
private void setNetworkSeekBarSummary(SeekBarPreference seekBarPreference) { private void setNetworkSeekBarSummary(SeekBarPreference seekBarPreference) {
int position = seekBarPreference.getValue(); int position = seekBarPreference.getValue();
if (position == 0) { seekBarPreference.setSummary(getNetworkSeekBarSummary(position));
seekBarPreference.setSummary(R.string.over_network_never_summary);
} else if (position == 1) {
seekBarPreference.setSummary(R.string.over_network_on_demand_summary);
} else if (position == 2) {
seekBarPreference.setSummary(R.string.over_network_always_summary);
} else {
throw new IllegalArgumentException("No such " + seekBarPreference.getTitle() + " position: " + position);
}
} }
private void enableUpdateInverval() { private void enableUpdateInverval() {