Search in sources :

Example 6 with Slider

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));
    }
}
Also used : Slider(com.google.android.material.slider.Slider) RangeSlider(com.google.android.material.slider.RangeSlider) RangeSlider(com.google.android.material.slider.RangeSlider)

Example 7 with Slider

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);
}
Also used : Slider(com.google.android.material.slider.Slider) TextView(android.widget.TextView) ImageView(android.widget.ImageView) View(android.view.View) TextView(android.widget.TextView)

Example 8 with Slider

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);
}
Also used : Slider(com.google.android.material.slider.Slider) TextView(android.widget.TextView)

Example 9 with Slider

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;
}
Also used : LayoutParams(android.widget.LinearLayout.LayoutParams) LayoutParams(android.widget.LinearLayout.LayoutParams) Slider(com.google.android.material.slider.Slider) ViewGroup(android.view.ViewGroup) TextView(android.widget.TextView) ApplicationMode(net.osmand.plus.settings.backend.ApplicationMode) View(android.view.View) TextView(android.widget.TextView) LinearLayout(android.widget.LinearLayout) AppCompatCheckBox(androidx.appcompat.widget.AppCompatCheckBox)

Example 10 with Slider

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);
    }
}
Also used : AppearanceListItem(net.osmand.plus.track.GpxAppearanceAdapter.AppearanceListItem) Slider(com.google.android.material.slider.Slider) TextView(android.widget.TextView)

Aggregations

Slider (com.google.android.material.slider.Slider)14 TextView (android.widget.TextView)12 View (android.view.View)7 Context (android.content.Context)2 ImageView (android.widget.ImageView)2 AlertDialog (androidx.appcompat.app.AlertDialog)2 BaseBottomSheetItem (net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem)2 BottomSheetItemWithCompoundButton (net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton)2 DividerSpaceItem (net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem)2 TitleItem (net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem)2 ApplicationMode (net.osmand.plus.settings.backend.ApplicationMode)2 InputFilter (android.text.InputFilter)1 OnClickListener (android.view.View.OnClickListener)1 ViewGroup (android.view.ViewGroup)1 EditText (android.widget.EditText)1 LinearLayout (android.widget.LinearLayout)1 LayoutParams (android.widget.LinearLayout.LayoutParams)1 ContextThemeWrapper (androidx.appcompat.view.ContextThemeWrapper)1 AppCompatCheckBox (androidx.appcompat.widget.AppCompatCheckBox)1 Fragment (androidx.fragment.app.Fragment)1