use of com.google.android.material.slider.Slider in project Osmand by osmandapp.
the class GpsFiltersCard method setupSlider.
private void setupSlider(@NonNull final View container, @NonNull final GpsFilter filter) {
boolean range = filter.isRangeSupported();
boolean enabled = filter.getMinValue() != filter.getMaxValue();
Slider slider = container.findViewById(R.id.filter_slider);
RangeSlider rangeSlider = container.findViewById(R.id.filter_range_slider);
AndroidUiHelper.updateVisibility(slider, !range);
AndroidUiHelper.updateVisibility(rangeSlider, range);
if (range) {
rangeSlider.setEnabled(enabled);
rangeSlider.clearOnChangeListeners();
if (enabled) {
rangeSlider.setValueFrom((float) filter.getMinValue());
rangeSlider.setValueTo((float) filter.getMaxValue());
rangeSlider.setValues(((float) filter.getSelectedMinValue()), ((float) filter.getSelectedMaxValue()));
rangeSlider.addOnChangeListener((slider1, value, fromUser) -> {
List<Float> values = rangeSlider.getValues();
if (fromUser && values.size() == 2) {
filter.updateValues((values.get(0)), values.get(1));
updateDisplayedFilterNumbers(container, filter);
if (gpxDataItem != null) {
boolean updated = gpxDbHelper.updateGpsFilters(gpxDataItem, filteredSelectedGpxFile);
if (updated) {
gpsFilterHelper.filterGpxFile(filteredSelectedGpxFile, true);
}
}
}
});
}
UiUtilities.setupSlider(rangeSlider, nightMode, ColorUtilities.getActiveColor(app, nightMode), false);
} else {
slider.setEnabled(enabled);
slider.clearOnChangeListeners();
if (enabled) {
slider.setValueFrom((float) filter.getMinValue());
slider.setValueTo((float) filter.getMaxValue());
slider.setValue((float) filter.getSelectedMaxValue());
slider.addOnChangeListener((slider1, value, fromUser) -> {
if (fromUser) {
filter.updateValue((slider.getValue()));
updateDisplayedFilterNumbers(container, filter);
if (gpxDataItem != null) {
boolean updated = gpxDbHelper.updateGpsFilters(gpxDataItem, filteredSelectedGpxFile);
if (updated) {
gpsFilterHelper.filterGpxFile(filteredSelectedGpxFile, true);
}
}
}
});
}
UiUtilities.setupSlider(slider, nightMode, ColorUtilities.getActiveColor(app, nightMode));
}
}
use of com.google.android.material.slider.Slider in project Osmand by osmandapp.
the class VehicleParametersFragment method setupSpeedSlider.
private void setupSpeedSlider(final SpeedSliderType type, String speedUnits, final int[] defaultValue, final int[] minValue, final int[] maxValue, final int min, int max, View seekbarView, int activeColor) {
View sliderLayout;
int titleId;
final int[] speedValue;
switch(type) {
case DEFAULT_SPEED_ONLY:
speedValue = defaultValue;
sliderLayout = seekbarView.findViewById(R.id.min_speed_layout);
titleId = R.string.default_speed_setting_title;
break;
case MIN_SPEED:
speedValue = minValue;
sliderLayout = seekbarView.findViewById(R.id.min_speed_layout);
titleId = R.string.shared_string_min_speed;
break;
case MAX_SPEED:
speedValue = maxValue;
sliderLayout = seekbarView.findViewById(R.id.max_speed_layout);
titleId = R.string.shared_string_max_speed;
break;
default:
speedValue = defaultValue;
sliderLayout = seekbarView.findViewById(R.id.default_speed_layout);
titleId = R.string.default_speed_setting_title;
break;
}
final Slider slider = sliderLayout.findViewById(R.id.speed_slider);
final TextView speedTitleTv = sliderLayout.findViewById(R.id.speed_title);
final TextView speedMinTv = sliderLayout.findViewById(R.id.speed_seekbar_min_text);
final TextView speedMaxTv = sliderLayout.findViewById(R.id.speed_seekbar_max_text);
final TextView speedUnitsTv = sliderLayout.findViewById(R.id.speed_units);
final TextView speedTv = sliderLayout.findViewById(R.id.speed_text);
speedTitleTv.setText(titleId);
speedMinTv.setText(String.valueOf(min));
speedMaxTv.setText(String.valueOf(max));
speedTv.setText(String.valueOf(speedValue[0]));
speedUnitsTv.setText(speedUnits);
slider.setValueTo(max - min);
slider.setValue(Math.max(speedValue[0] - min, 0));
slider.addOnChangeListener(new Slider.OnChangeListener() {
@Override
public void onValueChange(@NonNull Slider slider, float val, boolean fromUser) {
int progress = (int) val;
int value = progress + min;
switch(type) {
case DEFAULT_SPEED:
case DEFAULT_SPEED_ONLY:
if (value > maxValue[0]) {
value = maxValue[0];
slider.setValue(Math.max(value - min, 0));
} else if (value < minValue[0]) {
value = minValue[0];
slider.setValue(Math.max(value - min, 0));
}
break;
case MIN_SPEED:
if (value > defaultValue[0]) {
value = defaultValue[0];
slider.setValue(Math.max(value - min, 0));
}
break;
case MAX_SPEED:
if (value < defaultValue[0]) {
value = defaultValue[0];
slider.setValue(Math.max(value - min, 0));
}
break;
default:
break;
}
speedValue[0] = value;
speedTv.setText(String.valueOf(value));
}
});
UiUtilities.setupSlider(slider, isNightMode(), activeColor);
}
use of com.google.android.material.slider.Slider in project Osmand by osmandapp.
the class RouteParametersFragment method setupAngleSlider.
private static void setupAngleSlider(final float[] angleValue, View sliderView, final boolean nightMode, final int activeColor) {
final Slider angleBar = sliderView.findViewById(R.id.angle_slider);
final TextView angleTv = sliderView.findViewById(R.id.angle_text);
angleTv.setText(String.valueOf(angleValue[0]));
angleBar.setValue((int) angleValue[0]);
angleBar.addOnChangeListener(new Slider.OnChangeListener() {
@Override
public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
angleValue[0] = value;
angleTv.setText(String.valueOf(value));
}
});
UiUtilities.setupSlider(angleBar, nightMode, activeColor, true);
}
use of com.google.android.material.slider.Slider in project Osmand by osmandapp.
the class OsmandMonitoringPlugin method createIntervalChooseLayout.
public static LinearLayout createIntervalChooseLayout(final OsmandApplication app, final Context uiCtx, final String patternMsg, final int[] seconds, final int[] minutes, final ValueHolder<Boolean> choice, final ValueHolder<Integer> v, final boolean showTrackSelection, boolean nightMode) {
ApplicationMode appMode = app.getSettings().getApplicationMode();
int textColorPrimary = ColorUtilities.getPrimaryTextColor(app, nightMode);
int textColorSecondary = ColorUtilities.getSecondaryTextColor(app, nightMode);
int selectedModeColor = appMode.getProfileColor(nightMode);
LinearLayout ll = new LinearLayout(uiCtx);
final int dp24 = AndroidUtils.dpToPx(uiCtx, 24f);
final int dp8 = AndroidUtils.dpToPx(uiCtx, 8f);
final TextView tv = new TextView(uiCtx);
tv.setPadding(dp24, dp8 * 2, dp24, dp8);
tv.setText(String.format(patternMsg, uiCtx.getString(R.string.int_continuosly)));
tv.setTextColor(textColorSecondary);
final int secondsLength = seconds.length;
final int minutesLength = minutes.length;
ViewGroup sliderContainer = UiUtilities.createSliderView(uiCtx, nightMode);
sliderContainer.setPadding(dp24, dp8, dp24, dp8);
Slider sp = sliderContainer.findViewById(R.id.slider);
UiUtilities.setupSlider(sp, nightMode, selectedModeColor, true);
sp.setValueTo(secondsLength + minutesLength - 1);
sp.setStepSize(1);
sp.addOnChangeListener((slider, value, fromUser) -> {
String s;
int progress = (int) value;
if (progress == 0) {
s = uiCtx.getString(R.string.int_continuosly);
v.value = 0;
} else {
if (progress < secondsLength) {
s = seconds[progress] + " " + uiCtx.getString(R.string.int_seconds);
v.value = seconds[progress] * 1000;
} else {
s = minutes[progress - secondsLength] + " " + uiCtx.getString(R.string.int_min);
v.value = minutes[progress - secondsLength] * 60 * 1000;
}
}
tv.setText(String.format(patternMsg, s));
});
for (int i = 0; i < secondsLength + minutesLength - 1; i++) {
if (i < secondsLength) {
if (v.value <= seconds[i] * 1000) {
sp.setValue(i);
break;
}
} else {
if (v.value <= minutes[i - secondsLength] * 1000 * 60) {
sp.setValue(i);
break;
}
}
}
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(tv);
ll.addView(sliderContainer);
if (choice != null) {
final AppCompatCheckBox cb = new AppCompatCheckBox(uiCtx);
cb.setText(R.string.confirm_every_run);
cb.setTextColor(textColorPrimary);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
AndroidUtils.setMargins(lp, dp24, dp8, dp24, 0);
cb.setLayoutParams(lp);
AndroidUtils.setPadding(cb, dp8, 0, 0, 0);
cb.setChecked(!choice.value);
cb.setOnCheckedChangeListener((buttonView, isChecked) -> choice.value = !isChecked);
UiUtilities.setupCompoundButton(cb, nightMode, PROFILE_DEPENDENT);
ll.addView(cb);
}
if (showTrackSelection) {
View divider = new View(uiCtx);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, AndroidUtils.dpToPx(uiCtx, 1f));
AndroidUtils.setMargins(lp, 0, dp8 * 2, 0, 0);
divider.setLayoutParams(lp);
divider.setBackgroundColor(ColorUtilities.getDividerColor(uiCtx, nightMode));
ll.addView(divider);
final AppCompatCheckBox cb = new AppCompatCheckBox(uiCtx);
cb.setText(R.string.shared_string_show_on_map);
cb.setTextColor(textColorPrimary);
lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
AndroidUtils.setMargins(lp, dp24, dp8 * 2, dp24, 0);
cb.setLayoutParams(lp);
AndroidUtils.setPadding(cb, dp8, 0, 0, 0);
cb.setChecked(app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null);
cb.setOnCheckedChangeListener((buttonView, isChecked) -> app.getSelectedGpxHelper().selectGpxFile(app.getSavingTrackHelper().getCurrentGpx(), isChecked, false));
UiUtilities.setupCompoundButton(cb, nightMode, PROFILE_DEPENDENT);
ll.addView(cb);
}
return ll;
}
use of com.google.android.material.slider.Slider in project Osmand by osmandapp.
the class TrackWidthCard method updateCustomWidthSlider.
private void updateCustomWidthSlider() {
sliderContainer = view.findViewById(R.id.slider_container);
AppearanceListItem item = getSelectedItem();
if (item != null && CUSTOM_WIDTH.equals(item.getAttrName())) {
Slider widthSlider = view.findViewById(R.id.width_slider);
widthSlider.setValueTo(CUSTOM_WIDTH_MAX);
widthSlider.setValueFrom(CUSTOM_WIDTH_MIN);
((TextView) view.findViewById(R.id.width_value_min)).setText(String.valueOf(CUSTOM_WIDTH_MIN));
((TextView) view.findViewById(R.id.width_value_max)).setText(String.valueOf(CUSTOM_WIDTH_MAX));
String width = getSelectedItem().getValue();
if (!Algorithms.isEmpty(width) && Algorithms.isInt(width)) {
try {
widthSlider.setValue(Integer.parseInt(width));
} catch (NumberFormatException e) {
widthSlider.setValue(1);
}
} else {
widthSlider.setValue(1);
}
final TextView selectedCustomWidth = view.findViewById(R.id.width_value_tv);
widthSlider.addOnChangeListener(new Slider.OnChangeListener() {
@Override
public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
if (fromUser) {
String valueStr = String.valueOf((int) value);
selectedCustomWidth.setText(valueStr);
getSelectedItem().setValue(valueStr);
setGpxWidth(valueStr);
}
}
});
UiUtilities.setupSlider(widthSlider, nightMode, null, true);
ScrollUtils.addOnGlobalLayoutListener(sliderContainer, new Runnable() {
@Override
public void run() {
if (sliderContainer.getVisibility() == View.VISIBLE) {
onNeedScrollListener.onVerticalScrollNeeded(sliderContainer.getBottom());
}
}
});
AndroidUiHelper.updateVisibility(sliderContainer, true);
} else {
AndroidUiHelper.updateVisibility(sliderContainer, false);
}
}
Aggregations