Search in sources :

Example 11 with MetricsConstants

use of net.osmand.plus.settings.enums.MetricsConstants in project Osmand by osmandapp.

the class RecalculateRouteInDeviationBottomSheet method createMenuItems.

@Override
public void createMenuItems(Bundle savedInstanceState) {
    app = requiredMyApplication();
    settings = app.getSettings();
    appMode = getAppMode();
    preference = settings.ROUTE_RECALCULATION_DISTANCE;
    Context themedCtx = UiUtilities.getThemedContext(app, nightMode);
    getPreferenceStateAndValue();
    final SwitchPreferenceEx switchPref = (SwitchPreferenceEx) getPreference();
    if (switchPref == null) {
        return;
    }
    if (savedInstanceState != null && savedInstanceState.containsKey(CURRENT_VALUE)) {
        currentValue = savedInstanceState.getFloat(CURRENT_VALUE);
    }
    int contentPaddingSmall = app.getResources().getDimensionPixelSize(R.dimen.content_padding_small);
    int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding);
    MetricsConstants mc = settings.METRIC_SYSTEM.get();
    if (mc == MetricsConstants.KILOMETERS_AND_METERS) {
        entryValues = new Float[] { 10.f, 20.0f, 30.0f, 50.0f, 100.0f, 200.0f, 500.0f, 1000.0f, 1500.0f };
    } else {
        entryValues = new Float[] { 9.1f, 18.3f, 30.5f, 45.7f, 91.5f, 183.0f, 482.0f, 965.0f, 1609.0f };
    }
    final int appModeColor = appMode.getProfileColor(nightMode);
    final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic);
    final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary);
    String title = getString(R.string.recalculate_route_in_deviation);
    items.add(new TitleItem(title));
    final View sliderView = UiUtilities.getInflater(getContext(), nightMode).inflate(R.layout.bottom_sheet_item_slider_with_two_text, null);
    slider = sliderView.findViewById(R.id.slider);
    tvSliderTitle = sliderView.findViewById(android.R.id.title);
    tvSliderTitle.setText(getString(R.string.distance));
    tvSliderSummary = sliderView.findViewById(android.R.id.summary);
    slider.setValueFrom(0);
    slider.setValueTo(entryValues.length - 1);
    slider.setStepSize(1);
    updateSliderView();
    final String on = getString(R.string.shared_string_enabled);
    final String off = getString(R.string.shared_string_disabled);
    final BottomSheetItemWithCompoundButton[] preferenceBtn = new BottomSheetItemWithCompoundButton[1];
    preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder().setChecked(enabled).setCompoundButtonColor(appModeColor).setTitle(enabled ? on : off).setTitleColorId(enabled ? activeColor : disabledColor).setCustomView(getCustomButtonView(app, getAppMode(), enabled, nightMode)).setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            enabled = !enabled;
            sliderPositionChanged = false;
            switchPref.setChecked(enabled);
            preferenceBtn[0].setTitle(enabled ? on : off);
            preferenceBtn[0].setTitleColorId(enabled ? activeColor : disabledColor);
            preferenceBtn[0].setChecked(enabled);
            getDefaultValue();
            updateSliderView();
            updateCustomButtonView(app, getAppMode(), v, enabled, nightMode);
            Fragment target = getTargetFragment();
            float newValue = enabled ? DEFAULT_MODE : DISABLE_MODE;
            if (target instanceof OnConfirmPreferenceChange) {
                ((OnConfirmPreferenceChange) target).onConfirmPreferenceChange(switchPref.getKey(), newValue, ApplyQueryType.NONE);
            }
        }
    }).create();
    items.add(preferenceBtn[0]);
    items.add(new DividerSpaceItem(app, contentPaddingSmall));
    items.add(new LongDescriptionItem(getString(R.string.select_distance_route_will_recalc)));
    items.add(new DividerSpaceItem(app, contentPadding));
    slider.addOnChangeListener(new Slider.OnChangeListener() {

        @Override
        public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
            sliderPositionChanged = true;
            if (fromUser) {
                currentValue = entryValues[(int) slider.getValue()];
                tvSliderSummary.setText(getFormattedDistance(app, currentValue));
            }
        }
    });
    UiUtilities.setupSlider(slider, nightMode, appModeColor, true);
    items.add(new BaseBottomSheetItem.Builder().setCustomView(sliderView).create());
    items.add(new SubtitmeListDividerItem(getContext()));
    items.add(new DividerSpaceItem(app, contentPaddingSmall));
    items.add(new LongDescriptionItem(getString(R.string.recalculate_route_distance_promo)));
}
Also used : Context(android.content.Context) BaseBottomSheetItem(net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem) Slider(com.google.android.material.slider.Slider) LongDescriptionItem(net.osmand.plus.base.bottomsheetmenu.simpleitems.LongDescriptionItem) TitleItem(net.osmand.plus.base.bottomsheetmenu.simpleitems.TitleItem) SwitchPreferenceEx(net.osmand.plus.settings.preferences.SwitchPreferenceEx) OnConfirmPreferenceChange(net.osmand.plus.settings.fragments.OnConfirmPreferenceChange) View(android.view.View) TextView(android.widget.TextView) Fragment(androidx.fragment.app.Fragment) MetricsConstants(net.osmand.plus.settings.enums.MetricsConstants) SubtitmeListDividerItem(net.osmand.plus.base.bottomsheetmenu.simpleitems.SubtitmeListDividerItem) DividerSpaceItem(net.osmand.plus.base.bottomsheetmenu.simpleitems.DividerSpaceItem) BottomSheetItemWithCompoundButton(net.osmand.plus.base.bottomsheetmenu.BottomSheetItemWithCompoundButton)

Example 12 with MetricsConstants

use of net.osmand.plus.settings.enums.MetricsConstants in project Osmand by osmandapp.

the class OsmAndFormatter method calculateRoundedDist.

public static double calculateRoundedDist(double distInMeters, OsmandApplication ctx) {
    OsmandSettings settings = ctx.getSettings();
    MetricsConstants mc = settings.METRIC_SYSTEM.get();
    double mainUnitInMeter = 1;
    double metersInSecondUnit = METERS_IN_KILOMETER;
    if (mc == MetricsConstants.MILES_AND_FEET) {
        mainUnitInMeter = FEET_IN_ONE_METER;
        metersInSecondUnit = METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_METERS) {
        mainUnitInMeter = 1;
        metersInSecondUnit = METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.NAUTICAL_MILES) {
        mainUnitInMeter = 1;
        metersInSecondUnit = METERS_IN_ONE_NAUTICALMILE;
    } else if (mc == MetricsConstants.MILES_AND_YARDS) {
        mainUnitInMeter = YARDS_IN_ONE_METER;
        metersInSecondUnit = METERS_IN_ONE_MILE;
    }
    // 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000 ...
    int generator = 1;
    byte pointer = 1;
    double point = mainUnitInMeter;
    double roundDist = 1;
    while (distInMeters * point >= generator) {
        roundDist = (generator / point);
        if (pointer++ % 3 == 2) {
            generator = generator * 5 / 2;
        } else {
            generator *= 2;
        }
        if (point == mainUnitInMeter && metersInSecondUnit * mainUnitInMeter * 0.9f <= generator) {
            point = 1 / metersInSecondUnit;
            generator = 1;
            pointer = 1;
        }
    }
    // Miles exceptions: 2000ft->0.5mi, 1000ft->0.25mi, 1000yd->0.5mi, 500yd->0.25mi, 1000m ->0.5mi, 500m -> 0.25mi
    if (mc == MetricsConstants.MILES_AND_METERS && roundDist == 1000) {
        roundDist = 0.5f * METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_METERS && roundDist == 500) {
        roundDist = 0.25f * METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_FEET && roundDist == 2000 / (double) FEET_IN_ONE_METER) {
        roundDist = 0.5f * METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_FEET && roundDist == 1000 / (double) FEET_IN_ONE_METER) {
        roundDist = 0.25f * METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_YARDS && roundDist == 1000 / (double) YARDS_IN_ONE_METER) {
        roundDist = 0.5f * METERS_IN_ONE_MILE;
    } else if (mc == MetricsConstants.MILES_AND_YARDS && roundDist == 500 / (double) YARDS_IN_ONE_METER) {
        roundDist = 0.25f * METERS_IN_ONE_MILE;
    }
    return roundDist;
}
Also used : MetricsConstants(net.osmand.plus.settings.enums.MetricsConstants) OsmandSettings(net.osmand.plus.settings.backend.OsmandSettings) ZonedUTMPoint(com.jwetherell.openmap.common.ZonedUTMPoint) MGRSPoint(com.jwetherell.openmap.common.MGRSPoint) LatLonPoint(com.jwetherell.openmap.common.LatLonPoint)

Example 13 with MetricsConstants

use of net.osmand.plus.settings.enums.MetricsConstants in project Osmand by osmandapp.

the class OsmAndFormatter method getFormattedAlt.

@NonNull
public static String getFormattedAlt(double alt, OsmandApplication ctx) {
    OsmandSettings settings = ctx.getSettings();
    MetricsConstants mc = settings.METRIC_SYSTEM.get();
    return getFormattedAlt(alt, ctx, mc);
}
Also used : MetricsConstants(net.osmand.plus.settings.enums.MetricsConstants) OsmandSettings(net.osmand.plus.settings.backend.OsmandSettings) NonNull(androidx.annotation.NonNull)

Aggregations

MetricsConstants (net.osmand.plus.settings.enums.MetricsConstants)13 OsmandSettings (net.osmand.plus.settings.backend.OsmandSettings)5 SuppressLint (android.annotation.SuppressLint)3 SpannableString (android.text.SpannableString)3 TextView (android.widget.TextView)2 XAxis (com.github.mikephil.charting.components.XAxis)2 YAxis (com.github.mikephil.charting.components.YAxis)2 BarEntry (com.github.mikephil.charting.data.BarEntry)2 Entry (com.github.mikephil.charting.data.Entry)2 Context (android.content.Context)1 View (android.view.View)1 NonNull (androidx.annotation.NonNull)1 Fragment (androidx.fragment.app.Fragment)1 Slider (com.google.android.material.slider.Slider)1 LatLonPoint (com.jwetherell.openmap.common.LatLonPoint)1 MGRSPoint (com.jwetherell.openmap.common.MGRSPoint)1 ZonedUTMPoint (com.jwetherell.openmap.common.ZonedUTMPoint)1 ArrayList (java.util.ArrayList)1 LatLon (net.osmand.data.LatLon)1 WorldRegion (net.osmand.map.WorldRegion)1