Merge branch 'master' into markers_refactor
This commit is contained in:
commit
c1e6654319
14 changed files with 86 additions and 126 deletions
7
OsmAnd/res/drawable/rectangle_rounded_left.xml
Normal file
7
OsmAnd/res/drawable/rectangle_rounded_left.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/list_item_button_padding"
|
||||
android:topLeftRadius="@dimen/list_item_button_padding" />
|
||||
<solid android:color="@color/list_background_color_dark" />
|
||||
</shape>
|
11
OsmAnd/res/drawable/ripple_rectangle_rounded_left.xml
Normal file
11
OsmAnd/res/drawable/ripple_rectangle_rounded_left.xml
Normal file
|
@ -0,0 +1,11 @@
|
|||
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:color="@color/active_buttons_and_links_trans_light">
|
||||
<item android:id="@android:id/mask">
|
||||
<shape android:shape="rectangle">
|
||||
<corners
|
||||
android:bottomLeftRadius="@dimen/list_item_button_padding"
|
||||
android:topLeftRadius="@dimen/list_item_button_padding" />
|
||||
<solid android:color="@color/active_color_primary_light" />
|
||||
</shape>
|
||||
</item>
|
||||
</ripple>
|
|
@ -1,15 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:id="@+id/background">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="#4d007eb3" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
||||
</item>
|
||||
<item android:id="@+id/progress">
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/color_white" />
|
||||
<corners android:radius="30dp" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -1,13 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<item android:id="@+id/thump">
|
||||
<shape android:shape="oval">
|
||||
<size
|
||||
android:width="12dp"
|
||||
android:height="12dp" />
|
||||
<solid android:color="@color/profile_icon_color_blue_light" />
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="oval">
|
||||
<size
|
||||
android:width="2dp"
|
||||
android:height="2dp" />
|
||||
<solid android:color="#17181A" />
|
||||
</shape>
|
|
@ -62,18 +62,12 @@
|
|||
osmand:typeface="@string/font_roboto_medium"
|
||||
tools:text="Normal" />
|
||||
|
||||
<SeekBar
|
||||
android:id="@+id/seek_bar_arrival"
|
||||
style="@style/Widget.AppCompat.SeekBar.Discrete"
|
||||
<com.google.android.material.slider.Slider
|
||||
android:id="@+id/arrival_slider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="@dimen/pages_item_margin"
|
||||
android:maxHeight="2dp"
|
||||
android:paddingTop="11dp"
|
||||
android:paddingBottom="11dp"
|
||||
osmand:tickMark="@drawable/seekbar_tickmark_announcement_time"
|
||||
tools:max="3"
|
||||
tools:progress="1" />
|
||||
android:layout_marginLeft="@dimen/content_padding"
|
||||
android:layout_marginRight="@dimen/content_padding" />
|
||||
|
||||
<View
|
||||
android:id="@+id/divider"
|
||||
|
|
|
@ -445,6 +445,9 @@ public class ContextMenuAdapter {
|
|||
ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon);
|
||||
imageView.setImageDrawable(drawable);
|
||||
imageView.setVisibility(View.VISIBLE);
|
||||
if (secondaryDrawable == R.drawable.ic_action_additional_option) {
|
||||
UiUtilities.rotateImageByLayoutDirection(imageView);
|
||||
}
|
||||
} else {
|
||||
ImageView imageView = (ImageView) convertView.findViewById(R.id.secondary_icon);
|
||||
if (imageView != null) {
|
||||
|
|
|
@ -131,10 +131,6 @@ public class BackupHelper {
|
|||
return token.matches("[0-9]+");
|
||||
}
|
||||
|
||||
public boolean hasOsmLiveUpdates() {
|
||||
return InAppPurchaseHelper.isSubscribedToLiveUpdates(app);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public String getOrderId() {
|
||||
InAppPurchaseHelper purchaseHelper = app.getInAppPurchaseHelper();
|
||||
|
@ -167,7 +163,10 @@ public class BackupHelper {
|
|||
public void registerUser(@NonNull String email, @Nullable final OnRegisterUserListener listener) {
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put("email", email);
|
||||
params.put("orderid", getOrderId());
|
||||
String orderId = getOrderId();
|
||||
if (!Algorithms.isEmpty(orderId)) {
|
||||
params.put("orderid", orderId);
|
||||
}
|
||||
params.put("deviceid", app.getUserAndroidId());
|
||||
AndroidNetworkUtils.sendRequestAsync(app, USER_REGISTER_URL, params, "Register user", true, true, new OnRequestResultListener() {
|
||||
@Override
|
||||
|
|
|
@ -89,11 +89,6 @@ public class TestBackupActivity extends OsmandActionBarActivity {
|
|||
}
|
||||
});
|
||||
|
||||
if (!backupHelper.hasOsmLiveUpdates()) {
|
||||
findViewById(R.id.main_view).setVisibility(View.GONE);
|
||||
return;
|
||||
}
|
||||
|
||||
buttonRegister = findViewById(R.id.btn_register);
|
||||
UiUtilities.setupDialogButton(nightMode, buttonRegister, DialogButtonType.PRIMARY, "Register");
|
||||
buttonVerify = findViewById(R.id.btn_verify);
|
||||
|
|
|
@ -275,16 +275,14 @@ public class LiveUpdatesFragment extends BaseOsmAndDialogFragment implements OnL
|
|||
TextViewEx toolbarTitle = (TextViewEx) toolbar.findViewById(R.id.toolbar_title);
|
||||
toolbarTitle.setText(R.string.osm_live);
|
||||
|
||||
View closeButton = toolbar.findViewById(R.id.close_button);
|
||||
ImageView closeButton = (ImageView) toolbar.findViewById(R.id.close_button);
|
||||
UiUtilities.rotateImageByLayoutDirection(closeButton);
|
||||
closeButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
dismiss();
|
||||
}
|
||||
});
|
||||
if (closeButton instanceof ImageView) {
|
||||
UiUtilities.rotateImageByLayoutDirection((ImageView) closeButton);
|
||||
}
|
||||
|
||||
FrameLayout iconHelpContainer = toolbar.findViewById(R.id.action_button);
|
||||
int iconColorResId = nightMode ? R.color.active_buttons_and_links_text_dark : R.color.active_buttons_and_links_text_light;
|
||||
|
@ -443,6 +441,8 @@ public class LiveUpdatesFragment extends BaseOsmAndDialogFragment implements OnL
|
|||
boolean isLastChild, View convertView, ViewGroup parent) {
|
||||
LayoutInflater inflater = UiUtilities.getInflater(app, nightMode);
|
||||
convertView = inflater.inflate(R.layout.list_item_triple_row_icon_and_menu, parent, false);
|
||||
ImageView secondaryIcon = (ImageView) convertView.findViewById(R.id.secondary_icon);
|
||||
UiUtilities.rotateImageByLayoutDirection(secondaryIcon);
|
||||
LiveMapsViewHolder viewHolder = new LiveMapsViewHolder(convertView);
|
||||
convertView.setTag(viewHolder);
|
||||
viewHolder.bindLocalIndexInfo(getChild(groupPosition, childPosition).getFileName());
|
||||
|
|
|
@ -189,7 +189,24 @@ public class TransportStopController extends MenuController {
|
|||
}
|
||||
}
|
||||
|
||||
private static void sortTransportStops(@NonNull LatLon latLon, List<TransportStop> transportStops) {
|
||||
private static void sortTransportStopsExits(@NonNull LatLon latLon, @NonNull List<TransportStop> transportStops) {
|
||||
for (TransportStop transportStop : transportStops) {
|
||||
for (TransportStopExit exit : transportStop.getExits()) {
|
||||
int distance = (int) MapUtils.getDistance(latLon, exit.getLocation());
|
||||
if (transportStop.distance > distance) {
|
||||
transportStop.distance = distance;
|
||||
}
|
||||
}
|
||||
}
|
||||
Collections.sort(transportStops, new Comparator<TransportStop>() {
|
||||
@Override
|
||||
public int compare(TransportStop s1, TransportStop s2) {
|
||||
return Algorithms.compare(s1.distance, s2.distance);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private static void sortTransportStops(@NonNull LatLon latLon, @NonNull List<TransportStop> transportStops) {
|
||||
for (TransportStop transportStop : transportStops) {
|
||||
transportStop.distance = (int) MapUtils.getDistance(latLon, transportStop.getLocation());
|
||||
}
|
||||
|
@ -227,6 +244,8 @@ public class TransportStopController extends MenuController {
|
|||
|
||||
if (isSubwayEntrance) {
|
||||
stopAggregated = processTransportStopsForAmenity(transportStops, amenity);
|
||||
sortTransportStopsExits(loc, stopAggregated.getLocalTransportStops());
|
||||
sortTransportStopsExits(loc, stopAggregated.getNearbyTransportStops());
|
||||
} else {
|
||||
stopAggregated = new TransportStopAggregated();
|
||||
stopAggregated.setAmenity(amenity);
|
||||
|
|
|
@ -958,7 +958,7 @@ public class OsmandSettings {
|
|||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.BICYCLE, 2.77f);
|
||||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.PEDESTRIAN, 1.11f);
|
||||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.BOAT, 1.38f);
|
||||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.AIRCRAFT, 40f);
|
||||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.AIRCRAFT, 200f);
|
||||
DEFAULT_SPEED.setModeDefaultValue(ApplicationMode.SKI, 1.38f);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,26 +1,24 @@
|
|||
package net.osmand.plus.settings.bottomsheets;
|
||||
|
||||
import android.graphics.drawable.ClipDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.graphics.drawable.GradientDrawable;
|
||||
import android.graphics.drawable.LayerDrawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.SeekBar;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.fragment.app.Fragment;
|
||||
import androidx.fragment.app.FragmentManager;
|
||||
|
||||
import com.google.android.material.slider.Slider;
|
||||
import com.google.android.material.slider.Slider.OnChangeListener;
|
||||
|
||||
import net.osmand.PlatformUtil;
|
||||
import net.osmand.plus.OsmandApplication;
|
||||
import net.osmand.plus.R;
|
||||
import net.osmand.plus.UiUtilities;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
|
||||
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem.Builder;
|
||||
import net.osmand.plus.helpers.AndroidUiHelper;
|
||||
import net.osmand.plus.routing.data.AnnounceTimeDistances;
|
||||
import net.osmand.plus.settings.backend.ApplicationMode;
|
||||
|
@ -33,8 +31,7 @@ import org.apache.commons.logging.Log;
|
|||
import static net.osmand.plus.settings.bottomsheets.SingleSelectPreferenceBottomSheet.SELECTED_ENTRY_INDEX_KEY;
|
||||
|
||||
|
||||
public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
|
||||
implements SeekBar.OnSeekBarChangeListener {
|
||||
public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet {
|
||||
|
||||
public static final String TAG = AnnouncementTimeBottomSheet.class.getSimpleName();
|
||||
private static final Log LOG = PlatformUtil.getLog(AnnouncementTimeBottomSheet.class);
|
||||
|
@ -46,7 +43,7 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
|
|||
private int selectedEntryIndex = -1;
|
||||
|
||||
private TextViewEx tvSeekBarLabel;
|
||||
private SeekBar seekBarArrival;
|
||||
private Slider slider;
|
||||
private ImageView ivArrow;
|
||||
private TextViewEx tvIntervalsDescr;
|
||||
|
||||
|
@ -110,22 +107,6 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
|
|||
dismiss();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
|
||||
if (progress != selectedEntryIndex) {
|
||||
selectedEntryIndex = progress;
|
||||
updateViews();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartTrackingTouch(SeekBar seekBar) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopTrackingTouch(SeekBar seekBar) {
|
||||
}
|
||||
|
||||
private ListPreferenceEx getListPreference() {
|
||||
return (ListPreferenceEx) getPreference();
|
||||
}
|
||||
|
@ -135,30 +116,40 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
|
|||
.inflate(R.layout.bottom_sheet_announcement_time, null);
|
||||
|
||||
tvSeekBarLabel = rootView.findViewById(R.id.tv_seek_bar_label);
|
||||
seekBarArrival = rootView.findViewById(R.id.seek_bar_arrival);
|
||||
slider = rootView.findViewById(R.id.arrival_slider);
|
||||
ivArrow = rootView.findViewById(R.id.iv_arrow);
|
||||
tvIntervalsDescr = rootView.findViewById(R.id.tv_interval_descr);
|
||||
int appModeColor = getAppMode().getProfileColor(nightMode);
|
||||
|
||||
setProfileColorToSeekBar();
|
||||
seekBarArrival.setOnSeekBarChangeListener(this);
|
||||
seekBarArrival.setProgress(selectedEntryIndex);
|
||||
seekBarArrival.setMax(listPreference.getEntries().length - 1);
|
||||
rootView.findViewById(R.id.description_container).setOnClickListener(new View.OnClickListener() {
|
||||
slider.setValue(selectedEntryIndex);
|
||||
slider.setValueFrom(0);
|
||||
slider.setValueTo(listPreference.getEntries().length - 1);
|
||||
slider.setStepSize(1);
|
||||
slider.addOnChangeListener(new OnChangeListener() {
|
||||
@Override
|
||||
public void onValueChange(@NonNull Slider slider, float value, boolean fromUser) {
|
||||
int intValue = (int) value;
|
||||
if (intValue != selectedEntryIndex) {
|
||||
selectedEntryIndex = intValue;
|
||||
updateViews();
|
||||
}
|
||||
}
|
||||
});
|
||||
UiUtilities.setupSlider(slider, nightMode, appModeColor, true);
|
||||
rootView.findViewById(R.id.description_container).setOnClickListener(new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
toggleDescriptionVisibility();
|
||||
}
|
||||
});
|
||||
|
||||
return new BaseBottomSheetItem.Builder()
|
||||
return new Builder()
|
||||
.setCustomView(rootView)
|
||||
.create();
|
||||
}
|
||||
|
||||
private void updateViews() {
|
||||
seekBarArrival.setProgress(selectedEntryIndex);
|
||||
tvSeekBarLabel.setText(listPreference.getEntries()[selectedEntryIndex]);
|
||||
|
||||
float value = (float) listPreference.getEntryValues()[selectedEntryIndex];
|
||||
announceTimeDistances.setArrivalDistances(value);
|
||||
tvIntervalsDescr.setText(announceTimeDistances.getIntervalsDescription(app));
|
||||
|
@ -170,31 +161,6 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
|
|||
AndroidUiHelper.updateVisibility(tvIntervalsDescr, !collapsed);
|
||||
}
|
||||
|
||||
private void setProfileColorToSeekBar() {
|
||||
int color = getAppMode().getProfileColor(nightMode);
|
||||
|
||||
LayerDrawable seekBarProgressLayer =
|
||||
(LayerDrawable) ContextCompat.getDrawable(app, R.drawable.seekbar_progress_announcement_time);
|
||||
|
||||
GradientDrawable background = (GradientDrawable) seekBarProgressLayer.findDrawableByLayerId(R.id.background);
|
||||
background.setColor(color);
|
||||
background.setAlpha(70);
|
||||
|
||||
GradientDrawable progress = (GradientDrawable) seekBarProgressLayer.findDrawableByLayerId(R.id.progress);
|
||||
progress.setColor(color);
|
||||
Drawable clippedProgress = new ClipDrawable(progress, Gravity.CENTER_VERTICAL | Gravity.START, 1);
|
||||
|
||||
seekBarArrival.setProgressDrawable(new LayerDrawable(new Drawable[] {
|
||||
background, clippedProgress
|
||||
}));
|
||||
|
||||
LayerDrawable seekBarThumpLayer =
|
||||
(LayerDrawable) ContextCompat.getDrawable(app, R.drawable.seekbar_thumb_announcement_time);
|
||||
GradientDrawable thump = (GradientDrawable) seekBarThumpLayer.findDrawableByLayerId(R.id.thump);
|
||||
thump.setColor(color);
|
||||
seekBarArrival.setThumb(thump);
|
||||
}
|
||||
|
||||
public static void showInstance(@NonNull FragmentManager fm, String prefKey, Fragment target,
|
||||
@Nullable ApplicationMode appMode, boolean usedOnMap) {
|
||||
try {
|
||||
|
|
|
@ -134,6 +134,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
|
|||
|
||||
public static void updateCustomButtonView(OsmandApplication app, ApplicationMode mode, View customView, boolean checked, boolean nightMode) {
|
||||
Context themedCtx = UiUtilities.getThemedContext(app, nightMode);
|
||||
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(themedCtx);
|
||||
LinearLayout buttonView = customView.findViewById(R.id.button_container);
|
||||
|
||||
int bgColor;
|
||||
|
@ -149,10 +150,11 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
|
|||
ContextCompat.getColor(app, getActivePrimaryColorId(nightMode)), checked ? 0.3f : 0.5f);
|
||||
}
|
||||
|
||||
int bgResId = R.drawable.rectangle_rounded_right;
|
||||
int bgResId = isLayoutRtl ? R.drawable.rectangle_rounded_left : R.drawable.rectangle_rounded_right;
|
||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
|
||||
int selectableResId = R.drawable.ripple_rectangle_rounded_right;
|
||||
|
||||
int selectableResId = isLayoutRtl ?
|
||||
R.drawable.ripple_rectangle_rounded_left :
|
||||
R.drawable.ripple_rectangle_rounded_right;
|
||||
Drawable bgDrawable = app.getUIUtilities().getPaintedIcon(bgResId, bgColor);
|
||||
Drawable selectable = app.getUIUtilities().getPaintedIcon(selectableResId, selectedColor);
|
||||
Drawable[] layers = {bgDrawable, selectable};
|
||||
|
|
Loading…
Reference in a new issue