Android: Set each slider step size manually

This commit is contained in:
Charles Lombardo 2023-01-30 13:17:02 -05:00
parent 07cf8c5668
commit 26c8440ae1
6 changed files with 28 additions and 29 deletions

View file

@ -13,9 +13,9 @@ public class FloatSliderSetting extends SliderSetting
protected AbstractFloatSetting mSetting; protected AbstractFloatSetting mSetting;
public FloatSliderSetting(Context context, AbstractFloatSetting setting, int titleId, public FloatSliderSetting(Context context, AbstractFloatSetting setting, int titleId,
int descriptionId, int min, int max, String units) int descriptionId, int min, int max, String units, int stepSize)
{ {
super(context, titleId, descriptionId, min, max, units); super(context, titleId, descriptionId, min, max, units, stepSize);
mSetting = setting; mSetting = setting;
} }

View file

@ -13,9 +13,9 @@ public final class IntSliderSetting extends SliderSetting
private AbstractIntSetting mSetting; private AbstractIntSetting mSetting;
public IntSliderSetting(Context context, AbstractIntSetting setting, int titleId, public IntSliderSetting(Context context, AbstractIntSetting setting, int titleId,
int descriptionId, int min, int max, String units) int descriptionId, int min, int max, String units, int stepSize)
{ {
super(context, titleId, descriptionId, min, max, units); super(context, titleId, descriptionId, min, max, units, stepSize);
mSetting = setting; mSetting = setting;
} }

View file

@ -11,9 +11,9 @@ import org.dolphinemu.dolphinemu.features.settings.model.Settings;
public final class PercentSliderSetting extends FloatSliderSetting public final class PercentSliderSetting extends FloatSliderSetting
{ {
public PercentSliderSetting(Context context, AbstractFloatSetting setting, int titleId, public PercentSliderSetting(Context context, AbstractFloatSetting setting, int titleId,
int descriptionId, int min, int max, String units) int descriptionId, int min, int max, String units, int stepSize)
{ {
super(context, setting, titleId, descriptionId, min, max, units); super(context, setting, titleId, descriptionId, min, max, units, stepSize);
} }
@Override @Override

View file

@ -11,14 +11,16 @@ public abstract class SliderSetting extends SettingsItem
private int mMin; private int mMin;
private int mMax; private int mMax;
private String mUnits; private String mUnits;
private int mStepSize;
public SliderSetting(Context context, int nameId, int descriptionId, int min, int max, public SliderSetting(Context context, int nameId, int descriptionId, int min, int max,
String units) String units, int stepSize)
{ {
super(context, nameId, descriptionId); super(context, nameId, descriptionId);
mMin = min; mMin = min;
mMax = max; mMax = max;
mUnits = units; mUnits = units;
mStepSize = stepSize;
} }
public abstract int getSelectedValue(Settings settings); public abstract int getSelectedValue(Settings settings);
@ -38,6 +40,11 @@ public abstract class SliderSetting extends SettingsItem
return mUnits; return mUnits;
} }
public int getStepSize()
{
return mStepSize;
}
@Override @Override
public int getType() public int getType()
{ {

View file

@ -298,17 +298,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
slider.setValueFrom(item.getMin()); slider.setValueFrom(item.getMin());
slider.setValueTo(item.getMax()); slider.setValueTo(item.getMax());
slider.setValue(mSeekbarProgress); slider.setValue(mSeekbarProgress);
slider.setStepSize(item.getStepSize());
// Sliders can get frustrating to use with a small step size and large ranges
int maxRange = item.getMax() - item.getMin();
if (maxRange <= 100)
{
slider.setStepSize(1);
}
else
{
slider.setStepSize((int) Math.pow(10, Math.ceil(Math.log10(maxRange)) - 2));
}
slider.addOnChangeListener(this); slider.addOnChangeListener(this);

View file

@ -293,7 +293,7 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_AUTO_DISC_CHANGE, sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_AUTO_DISC_CHANGE,
R.string.auto_disc_change, 0)); R.string.auto_disc_change, 0));
sl.add(new PercentSliderSetting(mContext, FloatSetting.MAIN_EMULATION_SPEED, sl.add(new PercentSliderSetting(mContext, FloatSetting.MAIN_EMULATION_SPEED,
R.string.speed_limit, 0, 0, 200, "%")); R.string.speed_limit, 0, 0, 200, "%", 1));
sl.add(new SingleChoiceSetting(mContext, IntSetting.MAIN_FALLBACK_REGION, sl.add(new SingleChoiceSetting(mContext, IntSetting.MAIN_FALLBACK_REGION,
R.string.fallback_region, 0, R.array.regionEntries, R.array.regionValues)); R.string.fallback_region, 0, R.array.regionEntries, R.array.regionValues));
sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_ANALYTICS_ENABLED, R.string.analytics, sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_ANALYTICS_ENABLED, R.string.analytics,
@ -542,7 +542,7 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_AUDIO_STRETCH, R.string.audio_stretch, sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_AUDIO_STRETCH, R.string.audio_stretch,
R.string.audio_stretch_description)); R.string.audio_stretch_description));
sl.add(new IntSliderSetting(mContext, IntSetting.MAIN_AUDIO_VOLUME, R.string.audio_volume, 0, sl.add(new IntSliderSetting(mContext, IntSetting.MAIN_AUDIO_VOLUME, R.string.audio_volume, 0,
0, 100, "%")); 0, 100, "%", 1));
} }
private void addPathsSettings(ArrayList<SettingsItem> sl) private void addPathsSettings(ArrayList<SettingsItem> sl)
@ -621,9 +621,9 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.SYSCONF_WIIMOTE_MOTOR, sl.add(new SwitchSetting(mContext, BooleanSetting.SYSCONF_WIIMOTE_MOTOR,
R.string.wiimote_rumble, 0)); R.string.wiimote_rumble, 0));
sl.add(new IntSliderSetting(mContext, IntSetting.SYSCONF_SPEAKER_VOLUME, sl.add(new IntSliderSetting(mContext, IntSetting.SYSCONF_SPEAKER_VOLUME,
R.string.wiimote_volume, 0, 0, 127, "")); R.string.wiimote_volume, 0, 0, 127, "", 1));
sl.add(new IntSliderSetting(mContext, IntSetting.SYSCONF_SENSOR_BAR_SENSITIVITY, sl.add(new IntSliderSetting(mContext, IntSetting.SYSCONF_SENSOR_BAR_SENSITIVITY,
R.string.sensor_bar_sensitivity, 0, 1, 5, "")); R.string.sensor_bar_sensitivity, 0, 1, 5, "", 1));
sl.add(new SingleChoiceSetting(mContext, IntSetting.SYSCONF_SENSOR_BAR_POSITION, sl.add(new SingleChoiceSetting(mContext, IntSetting.SYSCONF_SENSOR_BAR_POSITION,
R.string.sensor_bar_position, 0, R.array.sensorBarPositionEntries, R.string.sensor_bar_position, 0, R.array.sensorBarPositionEntries,
R.array.sensorBarPositionValues)); R.array.sensorBarPositionValues));
@ -735,7 +735,7 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_OVERCLOCK_ENABLE, sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_OVERCLOCK_ENABLE,
R.string.overclock_enable, R.string.overclock_enable_description)); R.string.overclock_enable, R.string.overclock_enable_description));
sl.add(new PercentSliderSetting(mContext, FloatSetting.MAIN_OVERCLOCK, R.string.overclock_title, sl.add(new PercentSliderSetting(mContext, FloatSetting.MAIN_OVERCLOCK, R.string.overclock_title,
R.string.overclock_title_description, 0, 400, "%")); R.string.overclock_title_description, 0, 400, "%", 1));
AbstractIntSetting mem1Setting = new AbstractIntSetting() AbstractIntSetting mem1Setting = new AbstractIntSetting()
{ {
@ -805,8 +805,10 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_RAM_OVERRIDE_ENABLE, sl.add(new SwitchSetting(mContext, BooleanSetting.MAIN_RAM_OVERRIDE_ENABLE,
R.string.enable_memory_size_override, R.string.enable_memory_size_override,
R.string.enable_memory_size_override_description)); R.string.enable_memory_size_override_description));
sl.add(new IntSliderSetting(mContext, mem1Setting, R.string.main_mem1_size, 0, 24, 64, "MB")); sl.add(new IntSliderSetting(mContext, mem1Setting, R.string.main_mem1_size, 0, 24, 64, "MB",
sl.add(new IntSliderSetting(mContext, mem2Setting, R.string.main_mem2_size, 0, 64, 128, "MB")); 1));
sl.add(new IntSliderSetting(mContext, mem2Setting, R.string.main_mem2_size, 0, 64, 128, "MB",
1));
sl.add(new HeaderSetting(mContext, R.string.gpu_options, 0)); sl.add(new HeaderSetting(mContext, R.string.gpu_options, 0));
sl.add(new SingleChoiceSetting(mContext, synchronizeGpuThread, R.string.synchronize_gpu_thread, sl.add(new SingleChoiceSetting(mContext, synchronizeGpuThread, R.string.synchronize_gpu_thread,
@ -1030,7 +1032,7 @@ public final class SettingsFragmentPresenter
R.string.log_render_time_to_file_description)); R.string.log_render_time_to_file_description));
sl.add(new IntSliderSetting(mContext, IntSetting.GFX_PERF_SAMP_WINDOW, sl.add(new IntSliderSetting(mContext, IntSetting.GFX_PERF_SAMP_WINDOW,
R.string.performance_sample_window, R.string.performance_sample_window_description, 0, R.string.performance_sample_window, R.string.performance_sample_window_description, 0,
10000, "ms")); 10000, "ms", 100));
} }
private void addAdvancedGraphicsSettings(ArrayList<SettingsItem> sl) private void addAdvancedGraphicsSettings(ArrayList<SettingsItem> sl)
@ -1070,7 +1072,7 @@ public final class SettingsFragmentPresenter
sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_INTERNAL_RESOLUTION_FRAME_DUMPS, sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_INTERNAL_RESOLUTION_FRAME_DUMPS,
R.string.internal_resolution_dumps, R.string.internal_resolution_dumps_description)); R.string.internal_resolution_dumps, R.string.internal_resolution_dumps_description));
sl.add(new IntSliderSetting(mContext, IntSetting.GFX_PNG_COMPRESSION_LEVEL, sl.add(new IntSliderSetting(mContext, IntSetting.GFX_PNG_COMPRESSION_LEVEL,
R.string.png_compression_level, 0, 0, 9, "")); R.string.png_compression_level, 0, 0, 9, "", 1));
sl.add(new HeaderSetting(mContext, R.string.debugging, 0)); sl.add(new HeaderSetting(mContext, R.string.debugging, 0));
sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_ENABLE_WIREFRAME, sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_ENABLE_WIREFRAME,
@ -1143,10 +1145,10 @@ public final class SettingsFragmentPresenter
sl.add(new SingleChoiceSetting(mContext, IntSetting.GFX_STEREO_MODE, R.string.stereoscopy_mode, sl.add(new SingleChoiceSetting(mContext, IntSetting.GFX_STEREO_MODE, R.string.stereoscopy_mode,
0, R.array.stereoscopyEntries, R.array.stereoscopyValues)); 0, R.array.stereoscopyEntries, R.array.stereoscopyValues));
sl.add(new IntSliderSetting(mContext, IntSetting.GFX_STEREO_DEPTH, R.string.stereoscopy_depth, sl.add(new IntSliderSetting(mContext, IntSetting.GFX_STEREO_DEPTH, R.string.stereoscopy_depth,
R.string.stereoscopy_depth_description, 0, 100, "%")); R.string.stereoscopy_depth_description, 0, 100, "%", 1));
sl.add(new IntSliderSetting(mContext, IntSetting.GFX_STEREO_CONVERGENCE_PERCENTAGE, sl.add(new IntSliderSetting(mContext, IntSetting.GFX_STEREO_CONVERGENCE_PERCENTAGE,
R.string.stereoscopy_convergence, R.string.stereoscopy_convergence_description, 0, 200, R.string.stereoscopy_convergence, R.string.stereoscopy_convergence_description, 0, 200,
"%")); "%", 1));
sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_STEREO_SWAP_EYES, sl.add(new SwitchSetting(mContext, BooleanSetting.GFX_STEREO_SWAP_EYES,
R.string.stereoscopy_swap_eyes, R.string.stereoscopy_swap_eyes_description)); R.string.stereoscopy_swap_eyes, R.string.stereoscopy_swap_eyes_description));
} }