From 961bfa1cc78e1a315fa06a867f10b1455e30fd15 Mon Sep 17 00:00:00 2001 From: chumv Date: Thu, 19 Sep 2024 17:24:37 +0300 Subject: [PATCH 01/37] Move MapButtonTouchListener to MapButton --- .../controls/maphudbuttons/Map3DButton.java | 16 -------- .../controls/maphudbuttons/MapButton.java | 22 ++++++++++- .../maphudbuttons/MapButtonTouchListener.java | 38 ++++++++++++------- .../maphudbuttons/QuickActionButton.java | 12 ------ 4 files changed, 46 insertions(+), 42 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/Map3DButton.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/Map3DButton.java index 33fc547cd5b..46fae21e972 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/Map3DButton.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/Map3DButton.java @@ -2,10 +2,8 @@ import static net.osmand.plus.views.OsmandMapTileView.DEFAULT_ELEVATION_ANGLE; import static net.osmand.plus.views.OsmandMapTileView.ElevationListener; -import static net.osmand.plus.views.layers.ContextMenuLayer.VIBRATE_SHORT; import android.content.Context; -import android.os.Vibrator; import android.util.AttributeSet; import android.view.View; @@ -41,7 +39,6 @@ public Map3DButton(@NonNull Context context, @Nullable AttributeSet attrs, int d animateDraggingMapThread = getMapView().getAnimatedDraggingThread(); setOnClickListener(getOnCLickListener()); - setOnLongClickListener(getLongClickListener()); } @Nullable @@ -93,19 +90,6 @@ public void onStopChangingElevation(float angle) { }; } - @NonNull - private View.OnLongClickListener getLongClickListener() { - return view -> { - Vibrator vibrator = (Vibrator) mapActivity.getSystemService(Context.VIBRATOR_SERVICE); - vibrator.vibrate(VIBRATE_SHORT); - setScaleX(1.5f); - setScaleY(1.5f); - setAlpha(0.95f); - setOnTouchListener(new MapButtonTouchListener(mapActivity, buttonState.getFabMarginPref())); - return true; - }; - } - @Override protected boolean shouldShow() { boolean shouldShowFabButton = mapActivity.getWidgetsVisibilityHelper().shouldShowMap3DButton(); diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java index b94bf1d0096..b91bf182481 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java @@ -8,6 +8,7 @@ import static net.osmand.plus.quickaction.ButtonAppearanceParams.ROUND_RADIUS_DP; import static net.osmand.plus.quickaction.ButtonAppearanceParams.TRANSPARENT_ALPHA; import static net.osmand.plus.settings.backend.preferences.FabMarginPreference.setFabButtonMargin; +import static net.osmand.plus.views.layers.ContextMenuLayer.VIBRATE_SHORT; import android.content.Context; import android.graphics.Canvas; @@ -19,11 +20,13 @@ import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.ShapeDrawable; import android.graphics.drawable.shapes.RoundRectShape; +import android.os.Vibrator; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.view.View.OnAttachStateChangeListener; import android.view.ViewGroup; +import android.view.ViewParent; import android.widget.FrameLayout; import android.widget.ImageView; @@ -165,6 +168,20 @@ public void setAlwaysVisible(boolean alwaysVisible) { public void setUseCustomPosition(boolean useCustomPosition) { this.useCustomPosition = useCustomPosition; + + MapButtonState buttonState = getButtonState(); + FabMarginPreference marginPreference = buttonState != null ? buttonState.getFabMarginPref() : null; + if (useCustomPosition && marginPreference != null) { + setOnLongClickListener(v -> { + Vibrator vibrator = (Vibrator) mapActivity.getSystemService(Context.VIBRATOR_SERVICE); + vibrator.vibrate(VIBRATE_SHORT); + setScaleX(1.5f); + setScaleY(1.5f); + setAlpha(0.95f); + setOnTouchListener(new MapButtonTouchListener(mapActivity, marginPreference)); + return true; + }); + } } public void setUseDefaultAppearance(boolean useDefaultAppearance) { @@ -351,9 +368,12 @@ protected boolean updateVisibility(boolean visible) { } public void updateMargins() { + if (mapActivity == null) { + return; + } MapButtonState buttonState = getButtonState(); FabMarginPreference preference = buttonState != null ? buttonState.getFabMarginPref() : null; - if (mapActivity != null && useCustomPosition && preference != null) { + if (preference != null && useCustomPosition) { if (AndroidUiHelper.isOrientationPortrait(mapActivity)) { Pair margins = preference.getPortraitFabMargins(); Pair defMargins = preference.getDefaultPortraitMargins(); diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java index aacfe92149a..84be97cd9f5 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java @@ -44,24 +44,26 @@ public boolean onTouch(View view, MotionEvent event) { view.setScaleX(1); view.setScaleY(1); view.setAlpha(1f); - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); - if (AndroidUiHelper.isOrientationPortrait(activity)) - preference.setPortraitFabMargin(params.rightMargin, params.bottomMargin); - else preference.setLandscapeFabMargin(params.rightMargin, params.bottomMargin); + + updatePreference(view); + return true; } case MotionEvent.ACTION_MOVE -> { - if (initialMarginX == 0 && initialMarginY == 0 && initialTouchX == 0 && initialTouchY == 0) + if (initialMarginX == 0 && initialMarginY == 0 && initialTouchX == 0 && initialTouchY == 0) { setUpInitialValues(view, event); - int padding = AndroidUtils.calculateTotalSizePx(activity, R.dimen.map_button_margin); + } + int padding = AndroidUtils.calculateTotalSizePx(view.getContext(), R.dimen.map_button_margin); FrameLayout parent = (FrameLayout) view.getParent(); FrameLayout.LayoutParams param = (FrameLayout.LayoutParams) view.getLayoutParams(); int deltaX = (int) (initialTouchX - event.getRawX()); int deltaY = (int) (initialTouchY - event.getRawY()); int newMarginX = interpolate(initialMarginX + deltaX, view.getWidth(), parent.getWidth() - padding * 2); int newMarginY = interpolate(initialMarginY + deltaY, view.getHeight(), parent.getHeight() - padding * 2); - if (view.getHeight() + newMarginY <= parent.getHeight() - padding * 2 && newMarginY > 0) + + if (view.getHeight() + newMarginY <= parent.getHeight() - padding * 2 && newMarginY > 0) { param.bottomMargin = newMarginY; + } if (view.getWidth() + newMarginX <= parent.getWidth() - padding * 2 && newMarginX > 0) { param.rightMargin = newMarginX; } @@ -72,14 +74,24 @@ public boolean onTouch(View view, MotionEvent event) { return false; } + private void updatePreference(@NonNull View view) { + FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); + if (AndroidUiHelper.isOrientationPortrait(activity)) { + preference.setPortraitFabMargin(params.rightMargin, params.bottomMargin); + } else { + preference.setLandscapeFabMargin(params.rightMargin, params.bottomMargin); + } + } + private int interpolate(int value, int divider, int boundsSize) { - if (value <= divider && value > 0) return value * value / divider; - else { - int leftMargin = boundsSize - value - divider; - if (leftMargin <= divider && value < boundsSize - divider) - return leftMargin - (leftMargin * leftMargin / divider) + value; - else return value; + if (value <= divider && value > 0) { + return value * value / divider; + } + int leftMargin = boundsSize - value - divider; + if (leftMargin <= divider && value < boundsSize - divider) { + return leftMargin - (leftMargin * leftMargin / divider) + value; } + return value; } private void setUpInitialValues(@NonNull View view, @NonNull MotionEvent event) { diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/QuickActionButton.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/QuickActionButton.java index d7e6cdd5094..4bfb0cd97b8 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/QuickActionButton.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/QuickActionButton.java @@ -1,9 +1,6 @@ package net.osmand.plus.views.controls.maphudbuttons; -import static net.osmand.plus.views.layers.ContextMenuLayer.VIBRATE_SHORT; - import android.content.Context; -import android.os.Vibrator; import android.util.AttributeSet; import androidx.annotation.NonNull; @@ -50,15 +47,6 @@ public QuickActionButton(@NonNull Context context, @Nullable AttributeSet attrs, } setInvalidated(true); }); - setOnLongClickListener(v -> { - Vibrator vibrator = (Vibrator) mapActivity.getSystemService(Context.VIBRATOR_SERVICE); - vibrator.vibrate(VIBRATE_SHORT); - setScaleX(1.5f); - setScaleY(1.5f); - setAlpha(0.95f); - setOnTouchListener(new MapButtonTouchListener(mapActivity, buttonState.getFabMarginPref())); - return true; - }); } @Nullable From b71c85e45cd7637c5d3f4ce131af8f97fff344b3 Mon Sep 17 00:00:00 2001 From: ivanPyrohivskyi Date: Fri, 20 Sep 2024 15:07:17 +0300 Subject: [PATCH 02/37] Fix tagGroups in PoiBoxDataAtom --- .../java/net/osmand/binary/OsmandOdb.java | 454 +++++++++--------- 1 file changed, 227 insertions(+), 227 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java b/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java index 4b3fbe32885..3f8ffa7136c 100644 --- a/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java +++ b/OsmAnd-java/src/main/java/net/osmand/binary/OsmandOdb.java @@ -57196,20 +57196,6 @@ public interface OsmAndPoiBoxDataAtomOrBuilder */ long getId(); - // repeated uint32 tagGroups = 9 [packed = true]; - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - java.util.List getTagGroupsList(); - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - int getTagGroupsCount(); - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - int getTagGroups(int index); - // optional string openingHours = 10; /** * optional string openingHours = 10; @@ -57345,6 +57331,20 @@ public interface OsmAndPoiBoxDataAtomOrBuilder * */ int getPrecisionXY(); + + // repeated uint32 tagGroups = 17 [packed = true]; + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + java.util.List getTagGroupsList(); + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + int getTagGroupsCount(); + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + int getTagGroups(int index); } /** * Protobuf type {@code OsmAnd.OBF.OsmAndPoiBoxDataAtom} @@ -57464,27 +57464,6 @@ private OsmAndPoiBoxDataAtom( id_ = input.readUInt64(); break; } - case 72: { - if (!((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - tagGroups_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000080; - } - tagGroups_.add(input.readUInt32()); - break; - } - case 74: { - int length = input.readRawVarint32(); - int limit = input.pushLimit(length); - if (!((mutable_bitField0_ & 0x00000080) == 0x00000080) && input.getBytesUntilLimit() > 0) { - tagGroups_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000080; - } - while (input.getBytesUntilLimit() > 0) { - tagGroups_.add(input.readUInt32()); - } - input.popLimit(limit); - break; - } case 82: { bitField0_ |= 0x00000020; openingHours_ = input.readBytes(); @@ -57506,9 +57485,9 @@ private OsmAndPoiBoxDataAtom( break; } case 112: { - if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) { + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800)) { textCategories_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00001000; + mutable_bitField0_ |= 0x00000800; } textCategories_.add(input.readUInt32()); break; @@ -57516,9 +57495,9 @@ private OsmAndPoiBoxDataAtom( case 114: { int length = input.readRawVarint32(); int limit = input.pushLimit(length); - if (!((mutable_bitField0_ & 0x00001000) == 0x00001000) && input.getBytesUntilLimit() > 0) { + if (!((mutable_bitField0_ & 0x00000800) == 0x00000800) && input.getBytesUntilLimit() > 0) { textCategories_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00001000; + mutable_bitField0_ |= 0x00000800; } while (input.getBytesUntilLimit() > 0) { textCategories_.add(input.readUInt32()); @@ -57527,9 +57506,9 @@ private OsmAndPoiBoxDataAtom( break; } case 122: { - if (!((mutable_bitField0_ & 0x00002000) == 0x00002000)) { + if (!((mutable_bitField0_ & 0x00001000) == 0x00001000)) { textValues_ = new com.google.protobuf.LazyStringArrayList(); - mutable_bitField0_ |= 0x00002000; + mutable_bitField0_ |= 0x00001000; } textValues_.add(input.readBytes()); break; @@ -57539,6 +57518,27 @@ private OsmAndPoiBoxDataAtom( precisionXY_ = input.readInt32(); break; } + case 136: { + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + tagGroups_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + tagGroups_.add(input.readUInt32()); + break; + } + case 138: { + int length = input.readRawVarint32(); + int limit = input.pushLimit(length); + if (!((mutable_bitField0_ & 0x00004000) == 0x00004000) && input.getBytesUntilLimit() > 0) { + tagGroups_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00004000; + } + while (input.getBytesUntilLimit() > 0) { + tagGroups_.add(input.readUInt32()); + } + input.popLimit(limit); + break; + } } } } catch (com.google.protobuf.InvalidProtocolBufferException e) { @@ -57553,15 +57553,15 @@ private OsmAndPoiBoxDataAtom( if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { subcategories_ = java.util.Collections.unmodifiableList(subcategories_); } - if (((mutable_bitField0_ & 0x00000080) == 0x00000080)) { - tagGroups_ = java.util.Collections.unmodifiableList(tagGroups_); - } - if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) { + if (((mutable_bitField0_ & 0x00000800) == 0x00000800)) { textCategories_ = java.util.Collections.unmodifiableList(textCategories_); } - if (((mutable_bitField0_ & 0x00002000) == 0x00002000)) { + if (((mutable_bitField0_ & 0x00001000) == 0x00001000)) { textValues_ = new com.google.protobuf.UnmodifiableLazyStringList(textValues_); } + if (((mutable_bitField0_ & 0x00004000) == 0x00004000)) { + tagGroups_ = java.util.Collections.unmodifiableList(tagGroups_); + } this.unknownFields = unknownFields.build(); makeExtensionsImmutable(); } @@ -57802,30 +57802,6 @@ public long getId() { return id_; } - // repeated uint32 tagGroups = 9 [packed = true]; - public static final int TAGGROUPS_FIELD_NUMBER = 9; - private java.util.List tagGroups_; - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public java.util.List - getTagGroupsList() { - return tagGroups_; - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public int getTagGroupsCount() { - return tagGroups_.size(); - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public int getTagGroups(int index) { - return tagGroups_.get(index); - } - private int tagGroupsMemoizedSerializedSize = -1; - // optional string openingHours = 10; public static final int OPENINGHOURS_FIELD_NUMBER = 10; private java.lang.Object openingHours_; @@ -58099,6 +58075,30 @@ public int getPrecisionXY() { return precisionXY_; } + // repeated uint32 tagGroups = 17 [packed = true]; + public static final int TAGGROUPS_FIELD_NUMBER = 17; + private java.util.List tagGroups_; + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public java.util.List + getTagGroupsList() { + return tagGroups_; + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public int getTagGroupsCount() { + return tagGroups_.size(); + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public int getTagGroups(int index) { + return tagGroups_.get(index); + } + private int tagGroupsMemoizedSerializedSize = -1; + private void initFields() { dx_ = 0; dy_ = 0; @@ -58107,7 +58107,6 @@ private void initFields() { name_ = ""; nameEn_ = ""; id_ = 0L; - tagGroups_ = java.util.Collections.emptyList(); openingHours_ = ""; site_ = ""; phone_ = ""; @@ -58115,6 +58114,7 @@ private void initFields() { textCategories_ = java.util.Collections.emptyList(); textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; precisionXY_ = 0; + tagGroups_ = java.util.Collections.emptyList(); } private byte memoizedIsInitialized = -1; public final boolean isInitialized() { @@ -58157,13 +58157,6 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000010) == 0x00000010)) { output.writeUInt64(8, id_); } - if (getTagGroupsList().size() > 0) { - output.writeRawVarint32(74); - output.writeRawVarint32(tagGroupsMemoizedSerializedSize); - } - for (int i = 0; i < tagGroups_.size(); i++) { - output.writeUInt32NoTag(tagGroups_.get(i)); - } if (((bitField0_ & 0x00000020) == 0x00000020)) { output.writeBytes(10, getOpeningHoursBytes()); } @@ -58185,6 +58178,13 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (((bitField0_ & 0x00000200) == 0x00000200)) { output.writeInt32(16, precisionXY_); } + if (getTagGroupsList().size() > 0) { + output.writeRawVarint32(138); + output.writeRawVarint32(tagGroupsMemoizedSerializedSize); + } + for (int i = 0; i < tagGroups_.size(); i++) { + output.writeUInt32NoTag(tagGroups_.get(i)); + } getUnknownFields().writeTo(output); } @@ -58232,20 +58232,6 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeUInt64Size(8, id_); } - { - int dataSize = 0; - for (int i = 0; i < tagGroups_.size(); i++) { - dataSize += com.google.protobuf.CodedOutputStream - .computeUInt32SizeNoTag(tagGroups_.get(i)); - } - size += dataSize; - if (!getTagGroupsList().isEmpty()) { - size += 1; - size += com.google.protobuf.CodedOutputStream - .computeInt32SizeNoTag(dataSize); - } - tagGroupsMemoizedSerializedSize = dataSize; - } if (((bitField0_ & 0x00000020) == 0x00000020)) { size += com.google.protobuf.CodedOutputStream .computeBytesSize(10, getOpeningHoursBytes()); @@ -58284,6 +58270,20 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeInt32Size(16, precisionXY_); } + { + int dataSize = 0; + for (int i = 0; i < tagGroups_.size(); i++) { + dataSize += com.google.protobuf.CodedOutputStream + .computeUInt32SizeNoTag(tagGroups_.get(i)); + } + size += dataSize; + if (!getTagGroupsList().isEmpty()) { + size += 2; + size += com.google.protobuf.CodedOutputStream + .computeInt32SizeNoTag(dataSize); + } + tagGroupsMemoizedSerializedSize = dataSize; + } size += getUnknownFields().getSerializedSize(); memoizedSerializedSize = size; return size; @@ -58414,21 +58414,21 @@ public Builder clear() { bitField0_ = (bitField0_ & ~0x00000020); id_ = 0L; bitField0_ = (bitField0_ & ~0x00000040); - tagGroups_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); openingHours_ = ""; - bitField0_ = (bitField0_ & ~0x00000100); + bitField0_ = (bitField0_ & ~0x00000080); site_ = ""; - bitField0_ = (bitField0_ & ~0x00000200); + bitField0_ = (bitField0_ & ~0x00000100); phone_ = ""; - bitField0_ = (bitField0_ & ~0x00000400); + bitField0_ = (bitField0_ & ~0x00000200); note_ = ""; - bitField0_ = (bitField0_ & ~0x00000800); + bitField0_ = (bitField0_ & ~0x00000400); textCategories_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); + bitField0_ = (bitField0_ & ~0x00000800); textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00002000); + bitField0_ = (bitField0_ & ~0x00001000); precisionXY_ = 0; + bitField0_ = (bitField0_ & ~0x00002000); + tagGroups_ = java.util.Collections.emptyList(); bitField0_ = (bitField0_ & ~0x00004000); return this; } @@ -58488,42 +58488,42 @@ public net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom buildPartial() { to_bitField0_ |= 0x00000010; } result.id_ = id_; - if (((bitField0_ & 0x00000080) == 0x00000080)) { - tagGroups_ = java.util.Collections.unmodifiableList(tagGroups_); - bitField0_ = (bitField0_ & ~0x00000080); - } - result.tagGroups_ = tagGroups_; - if (((from_bitField0_ & 0x00000100) == 0x00000100)) { + if (((from_bitField0_ & 0x00000080) == 0x00000080)) { to_bitField0_ |= 0x00000020; } result.openingHours_ = openingHours_; - if (((from_bitField0_ & 0x00000200) == 0x00000200)) { + if (((from_bitField0_ & 0x00000100) == 0x00000100)) { to_bitField0_ |= 0x00000040; } result.site_ = site_; - if (((from_bitField0_ & 0x00000400) == 0x00000400)) { + if (((from_bitField0_ & 0x00000200) == 0x00000200)) { to_bitField0_ |= 0x00000080; } result.phone_ = phone_; - if (((from_bitField0_ & 0x00000800) == 0x00000800)) { + if (((from_bitField0_ & 0x00000400) == 0x00000400)) { to_bitField0_ |= 0x00000100; } result.note_ = note_; - if (((bitField0_ & 0x00001000) == 0x00001000)) { + if (((bitField0_ & 0x00000800) == 0x00000800)) { textCategories_ = java.util.Collections.unmodifiableList(textCategories_); - bitField0_ = (bitField0_ & ~0x00001000); + bitField0_ = (bitField0_ & ~0x00000800); } result.textCategories_ = textCategories_; - if (((bitField0_ & 0x00002000) == 0x00002000)) { + if (((bitField0_ & 0x00001000) == 0x00001000)) { textValues_ = new com.google.protobuf.UnmodifiableLazyStringList( textValues_); - bitField0_ = (bitField0_ & ~0x00002000); + bitField0_ = (bitField0_ & ~0x00001000); } result.textValues_ = textValues_; - if (((from_bitField0_ & 0x00004000) == 0x00004000)) { + if (((from_bitField0_ & 0x00002000) == 0x00002000)) { to_bitField0_ |= 0x00000200; } result.precisionXY_ = precisionXY_; + if (((bitField0_ & 0x00004000) == 0x00004000)) { + tagGroups_ = java.util.Collections.unmodifiableList(tagGroups_); + bitField0_ = (bitField0_ & ~0x00004000); + } + result.tagGroups_ = tagGroups_; result.bitField0_ = to_bitField0_; onBuilt(); return result; @@ -58579,40 +58579,30 @@ public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) if (other.hasId()) { setId(other.getId()); } - if (!other.tagGroups_.isEmpty()) { - if (tagGroups_.isEmpty()) { - tagGroups_ = other.tagGroups_; - bitField0_ = (bitField0_ & ~0x00000080); - } else { - ensureTagGroupsIsMutable(); - tagGroups_.addAll(other.tagGroups_); - } - onChanged(); - } if (other.hasOpeningHours()) { - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000080; openingHours_ = other.openingHours_; onChanged(); } if (other.hasSite()) { - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000100; site_ = other.site_; onChanged(); } if (other.hasPhone()) { - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000200; phone_ = other.phone_; onChanged(); } if (other.hasNote()) { - bitField0_ |= 0x00000800; + bitField0_ |= 0x00000400; note_ = other.note_; onChanged(); } if (!other.textCategories_.isEmpty()) { if (textCategories_.isEmpty()) { textCategories_ = other.textCategories_; - bitField0_ = (bitField0_ & ~0x00001000); + bitField0_ = (bitField0_ & ~0x00000800); } else { ensureTextCategoriesIsMutable(); textCategories_.addAll(other.textCategories_); @@ -58622,7 +58612,7 @@ public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) if (!other.textValues_.isEmpty()) { if (textValues_.isEmpty()) { textValues_ = other.textValues_; - bitField0_ = (bitField0_ & ~0x00002000); + bitField0_ = (bitField0_ & ~0x00001000); } else { ensureTextValuesIsMutable(); textValues_.addAll(other.textValues_); @@ -58632,6 +58622,16 @@ public Builder mergeFrom(net.osmand.binary.OsmandOdb.OsmAndPoiBoxDataAtom other) if (other.hasPrecisionXY()) { setPrecisionXY(other.getPrecisionXY()); } + if (!other.tagGroups_.isEmpty()) { + if (tagGroups_.isEmpty()) { + tagGroups_ = other.tagGroups_; + bitField0_ = (bitField0_ & ~0x00004000); + } else { + ensureTagGroupsIsMutable(); + tagGroups_.addAll(other.tagGroups_); + } + onChanged(); + } this.mergeUnknownFields(other.getUnknownFields()); return this; } @@ -59106,72 +59106,6 @@ public Builder clearId() { return this; } - // repeated uint32 tagGroups = 9 [packed = true]; - private java.util.List tagGroups_ = java.util.Collections.emptyList(); - private void ensureTagGroupsIsMutable() { - if (!((bitField0_ & 0x00000080) == 0x00000080)) { - tagGroups_ = new java.util.ArrayList(tagGroups_); - bitField0_ |= 0x00000080; - } - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public java.util.List - getTagGroupsList() { - return java.util.Collections.unmodifiableList(tagGroups_); - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public int getTagGroupsCount() { - return tagGroups_.size(); - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public int getTagGroups(int index) { - return tagGroups_.get(index); - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public Builder setTagGroups( - int index, int value) { - ensureTagGroupsIsMutable(); - tagGroups_.set(index, value); - onChanged(); - return this; - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public Builder addTagGroups(int value) { - ensureTagGroupsIsMutable(); - tagGroups_.add(value); - onChanged(); - return this; - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public Builder addAllTagGroups( - java.lang.Iterable values) { - ensureTagGroupsIsMutable(); - super.addAll(values, tagGroups_); - onChanged(); - return this; - } - /** - * repeated uint32 tagGroups = 9 [packed = true]; - */ - public Builder clearTagGroups() { - tagGroups_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000080); - onChanged(); - return this; - } - // optional string openingHours = 10; private java.lang.Object openingHours_ = ""; /** @@ -59182,7 +59116,7 @@ public Builder clearTagGroups() { * */ public boolean hasOpeningHours() { - return ((bitField0_ & 0x00000100) == 0x00000100); + return ((bitField0_ & 0x00000080) == 0x00000080); } /** * optional string openingHours = 10; @@ -59234,7 +59168,7 @@ public Builder setOpeningHours( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000080; openingHours_ = value; onChanged(); return this; @@ -59247,7 +59181,7 @@ public Builder setOpeningHours( * */ public Builder clearOpeningHours() { - bitField0_ = (bitField0_ & ~0x00000100); + bitField0_ = (bitField0_ & ~0x00000080); openingHours_ = getDefaultInstance().getOpeningHours(); onChanged(); return this; @@ -59264,7 +59198,7 @@ public Builder setOpeningHoursBytes( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000100; + bitField0_ |= 0x00000080; openingHours_ = value; onChanged(); return this; @@ -59276,7 +59210,7 @@ public Builder setOpeningHoursBytes( * optional string site = 11; */ public boolean hasSite() { - return ((bitField0_ & 0x00000200) == 0x00000200); + return ((bitField0_ & 0x00000100) == 0x00000100); } /** * optional string site = 11; @@ -59316,7 +59250,7 @@ public Builder setSite( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000100; site_ = value; onChanged(); return this; @@ -59325,7 +59259,7 @@ public Builder setSite( * optional string site = 11; */ public Builder clearSite() { - bitField0_ = (bitField0_ & ~0x00000200); + bitField0_ = (bitField0_ & ~0x00000100); site_ = getDefaultInstance().getSite(); onChanged(); return this; @@ -59338,7 +59272,7 @@ public Builder setSiteBytes( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000200; + bitField0_ |= 0x00000100; site_ = value; onChanged(); return this; @@ -59350,7 +59284,7 @@ public Builder setSiteBytes( * optional string phone = 12; */ public boolean hasPhone() { - return ((bitField0_ & 0x00000400) == 0x00000400); + return ((bitField0_ & 0x00000200) == 0x00000200); } /** * optional string phone = 12; @@ -59390,7 +59324,7 @@ public Builder setPhone( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000200; phone_ = value; onChanged(); return this; @@ -59399,7 +59333,7 @@ public Builder setPhone( * optional string phone = 12; */ public Builder clearPhone() { - bitField0_ = (bitField0_ & ~0x00000400); + bitField0_ = (bitField0_ & ~0x00000200); phone_ = getDefaultInstance().getPhone(); onChanged(); return this; @@ -59412,7 +59346,7 @@ public Builder setPhoneBytes( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000400; + bitField0_ |= 0x00000200; phone_ = value; onChanged(); return this; @@ -59424,7 +59358,7 @@ public Builder setPhoneBytes( * optional string note = 13; */ public boolean hasNote() { - return ((bitField0_ & 0x00000800) == 0x00000800); + return ((bitField0_ & 0x00000400) == 0x00000400); } /** * optional string note = 13; @@ -59464,7 +59398,7 @@ public Builder setNote( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000800; + bitField0_ |= 0x00000400; note_ = value; onChanged(); return this; @@ -59473,7 +59407,7 @@ public Builder setNote( * optional string note = 13; */ public Builder clearNote() { - bitField0_ = (bitField0_ & ~0x00000800); + bitField0_ = (bitField0_ & ~0x00000400); note_ = getDefaultInstance().getNote(); onChanged(); return this; @@ -59486,7 +59420,7 @@ public Builder setNoteBytes( if (value == null) { throw new NullPointerException(); } - bitField0_ |= 0x00000800; + bitField0_ |= 0x00000400; note_ = value; onChanged(); return this; @@ -59495,9 +59429,9 @@ public Builder setNoteBytes( // repeated uint32 textCategories = 14; private java.util.List textCategories_ = java.util.Collections.emptyList(); private void ensureTextCategoriesIsMutable() { - if (!((bitField0_ & 0x00001000) == 0x00001000)) { + if (!((bitField0_ & 0x00000800) == 0x00000800)) { textCategories_ = new java.util.ArrayList(textCategories_); - bitField0_ |= 0x00001000; + bitField0_ |= 0x00000800; } } /** @@ -59581,7 +59515,7 @@ public Builder addAllTextCategories( */ public Builder clearTextCategories() { textCategories_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00001000); + bitField0_ = (bitField0_ & ~0x00000800); onChanged(); return this; } @@ -59589,9 +59523,9 @@ public Builder clearTextCategories() { // repeated string textValues = 15; private com.google.protobuf.LazyStringList textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; private void ensureTextValuesIsMutable() { - if (!((bitField0_ & 0x00002000) == 0x00002000)) { + if (!((bitField0_ & 0x00001000) == 0x00001000)) { textValues_ = new com.google.protobuf.LazyStringArrayList(textValues_); - bitField0_ |= 0x00002000; + bitField0_ |= 0x00001000; } } /** @@ -59661,7 +59595,7 @@ public Builder addAllTextValues( */ public Builder clearTextValues() { textValues_ = com.google.protobuf.LazyStringArrayList.EMPTY; - bitField0_ = (bitField0_ & ~0x00002000); + bitField0_ = (bitField0_ & ~0x00001000); onChanged(); return this; } @@ -59689,7 +59623,7 @@ public Builder addTextValuesBytes( * */ public boolean hasPrecisionXY() { - return ((bitField0_ & 0x00004000) == 0x00004000); + return ((bitField0_ & 0x00002000) == 0x00002000); } /** * optional int32 precisionXY = 16; @@ -59709,7 +59643,7 @@ public int getPrecisionXY() { * */ public Builder setPrecisionXY(int value) { - bitField0_ |= 0x00004000; + bitField0_ |= 0x00002000; precisionXY_ = value; onChanged(); return this; @@ -59722,12 +59656,78 @@ public Builder setPrecisionXY(int value) { * */ public Builder clearPrecisionXY() { - bitField0_ = (bitField0_ & ~0x00004000); + bitField0_ = (bitField0_ & ~0x00002000); precisionXY_ = 0; onChanged(); return this; } + // repeated uint32 tagGroups = 17 [packed = true]; + private java.util.List tagGroups_ = java.util.Collections.emptyList(); + private void ensureTagGroupsIsMutable() { + if (!((bitField0_ & 0x00004000) == 0x00004000)) { + tagGroups_ = new java.util.ArrayList(tagGroups_); + bitField0_ |= 0x00004000; + } + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public java.util.List + getTagGroupsList() { + return java.util.Collections.unmodifiableList(tagGroups_); + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public int getTagGroupsCount() { + return tagGroups_.size(); + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public int getTagGroups(int index) { + return tagGroups_.get(index); + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public Builder setTagGroups( + int index, int value) { + ensureTagGroupsIsMutable(); + tagGroups_.set(index, value); + onChanged(); + return this; + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public Builder addTagGroups(int value) { + ensureTagGroupsIsMutable(); + tagGroups_.add(value); + onChanged(); + return this; + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public Builder addAllTagGroups( + java.lang.Iterable values) { + ensureTagGroupsIsMutable(); + super.addAll(values, tagGroups_); + onChanged(); + return this; + } + /** + * repeated uint32 tagGroups = 17 [packed = true]; + */ + public Builder clearTagGroups() { + tagGroups_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00004000); + onChanged(); + return this; + } + // @@protoc_insertion_point(builder_scope:OsmAnd.OBF.OsmAndPoiBoxDataAtom) } @@ -76261,11 +76261,11 @@ public Builder setPluginidBytes( "DataAtom\"\234\002\n\024OsmAndPoiBoxDataAtom\022\n\n\002dx\030" + "\002 \002(\021\022\n\n\002dy\030\003 \002(\021\022\022\n\ncategories\030\004 \003(\r\022\025\n", "\rsubcategories\030\005 \003(\r\022\014\n\004name\030\006 \001(\t\022\016\n\006na" + - "meEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022\025\n\ttagGroups\030\t \003(" + - "\rB\002\020\001\022\024\n\014openingHours\030\n \001(\t\022\014\n\004site\030\013 \001(" + - "\t\022\r\n\005phone\030\014 \001(\t\022\014\n\004note\030\r \001(\t\022\026\n\016textCa" + - "tegories\030\016 \003(\r\022\022\n\ntextValues\030\017 \003(\t\022\023\n\013pr" + - "ecisionXY\030\020 \001(\005\"\032\n\007IdTable\022\017\n\007routeId\030\001 " + + "meEn\030\007 \001(\t\022\n\n\002id\030\010 \001(\004\022\024\n\014openingHours\030\n" + + " \001(\t\022\014\n\004site\030\013 \001(\t\022\r\n\005phone\030\014 \001(\t\022\014\n\004not" + + "e\030\r \001(\t\022\026\n\016textCategories\030\016 \003(\r\022\022\n\ntextV" + + "alues\030\017 \003(\t\022\023\n\013precisionXY\030\020 \001(\005\022\025\n\ttagG" + + "roups\030\021 \003(\rB\002\020\001\"\032\n\007IdTable\022\017\n\007routeId\030\001 " + "\003(\022\"F\n\017RestrictionData\022\014\n\004type\030\001 \002(\005\022\014\n\004" + "from\030\002 \002(\005\022\n\n\002to\030\003 \002(\005\022\013\n\003via\030\004 \001(\005\"x\n\tR" + "outeData\022\016\n\006points\030\001 \002(\014\022\022\n\npointTypes\030\004" + @@ -76587,7 +76587,7 @@ public com.google.protobuf.ExtensionRegistry assignDescriptors( internal_static_OsmAnd_OBF_OsmAndPoiBoxDataAtom_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable( internal_static_OsmAnd_OBF_OsmAndPoiBoxDataAtom_descriptor, - new java.lang.String[] { "Dx", "Dy", "Categories", "Subcategories", "Name", "NameEn", "Id", "TagGroups", "OpeningHours", "Site", "Phone", "Note", "TextCategories", "TextValues", "PrecisionXY", }); + new java.lang.String[] { "Dx", "Dy", "Categories", "Subcategories", "Name", "NameEn", "Id", "OpeningHours", "Site", "Phone", "Note", "TextCategories", "TextValues", "PrecisionXY", "TagGroups", }); internal_static_OsmAnd_OBF_IdTable_descriptor = getDescriptor().getMessageTypes().get(38); internal_static_OsmAnd_OBF_IdTable_fieldAccessorTable = new From e3d46b29b7c01487891f7af223744cf79dbc76c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Delord?= <57289288+sebastien46@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:34:18 +0000 Subject: [PATCH 03/37] Translated using Weblate (French) Currently translated at 99.9% (5301 of 5302 strings) --- OsmAnd/res/values-fr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-fr/strings.xml b/OsmAnd/res/values-fr/strings.xml index 6db9a54af47..89c0e21c5c8 100644 --- a/OsmAnd/res/values-fr/strings.xml +++ b/OsmAnd/res/values-fr/strings.xml @@ -5946,4 +5946,5 @@ Type de carburant Accède aux informations de votre véhicule via le protocole OBD Prise en charge de l\'OBD + Affiche la consommation de carburant du véhicule selon l\'OBD et la localisation \ No newline at end of file From fbdbd1b1cf303697bbe5ca1a41883246ca6f435a Mon Sep 17 00:00:00 2001 From: kjon Date: Sun, 22 Sep 2024 08:42:42 +0000 Subject: [PATCH 04/37] Translated using Weblate (German) Currently translated at 99.6% (5282 of 5302 strings) --- OsmAnd/res/values-de/strings.xml | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 6804e1363a5..736bb106d86 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -5906,4 +5906,38 @@ Bitte Internetverbindung und erneut versuchen. Noch keine Benutzerfotos zu diesem Standort hinzugefügt Keine Fotos verfügbar + Keine Kraftstoffart angegeben + Benzin + Methanol + Ethanol + Diesel + LPG + CNG + Propan + Elektrisch + Bifuel mit Benzin + Bifuel mit Methanol + Bifuel mit Ethanol + Bifuel mit E-Motor und Verbrennungsmotor + Hybrid elektrisch + Hybrid aus Elektro- und Verbrennungsmotor + Bifuel mit Wasserstoff + Wasserstoff + OBD + % + Drehzahl + U/min + Geschwindigkeitsanzeige über OBD-Sensor + V + Bifuel mit LPG + Bifuel mit CNG + Bifuel mit Propan + Hybrid Ethanol + Bifuel mit E-Motor + Hybrid Benzin + Hybrid Diesel + Hybrid Regenerativ + Hybrid Wasserstoff + Unbekannter Kraftstoff + Fahrzeugangaben \ No newline at end of file From 183b02543837f758cfd3966ff60124ee251ad16b Mon Sep 17 00:00:00 2001 From: Mr-Update Date: Sun, 22 Sep 2024 20:38:52 +0000 Subject: [PATCH 05/37] Translated using Weblate (German) Currently translated at 99.6% (5282 of 5302 strings) --- OsmAnd/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-de/strings.xml b/OsmAnd/res/values-de/strings.xml index 736bb106d86..dde778feac3 100644 --- a/OsmAnd/res/values-de/strings.xml +++ b/OsmAnd/res/values-de/strings.xml @@ -5903,7 +5903,7 @@ Im Browser öffnen Quelle Keine Internetverbindung - Bitte Internetverbindung und erneut versuchen. + Bitte Internetverbindung überprüfen und erneut versuchen. Noch keine Benutzerfotos zu diesem Standort hinzugefügt Keine Fotos verfügbar Keine Kraftstoffart angegeben From d3ead39412626459c13f69cbf27b12d6c066e2c4 Mon Sep 17 00:00:00 2001 From: 99 efi Date: Sun, 22 Sep 2024 10:15:53 +0000 Subject: [PATCH 06/37] Translated using Weblate (Hungarian) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-hu/strings.xml | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/OsmAnd/res/values-hu/strings.xml b/OsmAnd/res/values-hu/strings.xml index da6c878160c..ef54d71d257 100644 --- a/OsmAnd/res/values-hu/strings.xml +++ b/OsmAnd/res/values-hu/strings.xml @@ -5900,4 +5900,58 @@ Nincs elérhető fénykép Wikimedia Ehhez a helyhez még nem adtak hozzá felhasználói fotókat + Benzin + Metanol + Etanol + Gázolaj + LPG + CNG + Propán + V + Nincs megadva üzemanyagtípus + Elektromos + Benzinnel működő Bifuel + Metanollal működő Bifuel + Etanollal működő Bifuel + LPG-vel működő Bifuel + CNG-vel működő Bifuel + Elektromos árammal működő Bifuel + Bifuel elektromos és belső égésű motor + Hibrid benzines + Hibrid etanollal + Hibrid dízel + Hibrid elektromos + Hidrogén + Ismeretlen üzemanyagtípus + OBD + % + rpm + A jármű sebességét mutatja OBD érzékelőn keresztül + A fordulatszámot mutatja OBD érzékelőn keresztül + A beszívott levegő hőmérsékletét mutatja OBD érzékelőn keresztül + A levegő hőmérsékletét mutatja OBD érzékelőn keresztül + A hűtőfolyadék hőmérsékletét mutatja OBD érzékelőn keresztül + Az akkumulátor feszültséget mutatja OBD érzékelőn keresztül + Hibrid elektromos és belső égésű motor + Hibrid regeneratív + RPM + Járműmetrika + Az üzemanyagszintet mutatja OBD érzékelőn keresztül + A maradék üzemanyaggal megtehető távolságot mutatja OBD érzékelőn keresztül + Az üzemanyag típusát mutatja OBD érzékelőn keresztül + Beszívott levegő hőmérséklete + Környezeti levegő hőmérséklete + Akkumulátor feszültség + Hűtőfolyadék hőmérséklete + Üzemanyagszint + Üzemanyag fogyasztás + Az üzemanyag fogyasztást mutatja az OBD adatai alapján + Megtehető távolság + Üzemanyag típus + Hozzáfér a jármű adataihoz OBD protokollon keresztül + OBD támogatás + Járműmetrika + Hidrogénnel működő Bifuel + Hibrid hidrogén + Propánnal működő Bifuel \ No newline at end of file From 421bcd79810ab1d41e9c9adb3ec15c17590e6183 Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Sun, 22 Sep 2024 08:14:13 +0000 Subject: [PATCH 07/37] Translated using Weblate (Spanish) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-es/strings.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index fbf892e6021..4668ca7da3f 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -5907,7 +5907,7 @@ Gasolina Metanol Etanol - Diesel + Diésel GLP GNC Propano @@ -5921,7 +5921,7 @@ Combustible dual con electricidad Híbrido gasolina Híbrido etanol - Híbrido diesel + Híbrido diésel Híbrido eléctrico Motor híbrido eléctrico y de combustión Híbrido regenerativo @@ -5953,4 +5953,8 @@ Muestra el nivel de combustible del vehículo a través del sensor OBD Temperatura del refrigerante del motor Tipo de combustible + Motor eléctrico y de gasolina o diésel + Híbrido con hidrógeno + Métricas del panel de control + Métricas del panel de control \ No newline at end of file From c34fe5e11cf317516832efb13f33b2dc20b8fbc6 Mon Sep 17 00:00:00 2001 From: ERYpTION Date: Sun, 22 Sep 2024 15:52:47 +0000 Subject: [PATCH 08/37] Translated using Weblate (Danish) Currently translated at 99.2% (5261 of 5302 strings) --- OsmAnd/res/values-da/strings.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index 69ad73b5372..b813e2364a3 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -5907,4 +5907,25 @@ Der er endnu ikke tilføjet nogen brugerbilleder til dette sted Ingen fotos tilgængelige Wikimedia + V + Benzin + Metanol + Ethanol + Diesel + Flaskegas + Propan + Hybrid-benzin + Hybrid-ethanol + Hybrid-diesel + Hybrid regenerativ + Hybrid-brint + Brint + Ukendt brændstoftype + Køretøjets parametre + Elektrisk + Komprimeret naturgas (CNG) + Ingen brændstoftype angivet + Hybrid el- og forbrændingsmotor + % + Hybrid-elektrisk \ No newline at end of file From 8db422b3482e5dc4eac93d2f6079a55f45d328e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Delord?= <57289288+sebastien46@users.noreply.github.com> Date: Sun, 22 Sep 2024 18:35:33 +0000 Subject: [PATCH 09/37] Translated using Weblate (French) Currently translated at 97.5% (4756 of 4873 strings) --- OsmAnd/res/values-fr/phrases.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-fr/phrases.xml b/OsmAnd/res/values-fr/phrases.xml index 8fb73e78b09..c1c1d5e5ae3 100644 --- a/OsmAnd/res/values-fr/phrases.xml +++ b/OsmAnd/res/values-fr/phrases.xml @@ -1533,7 +1533,7 @@ Rampe pour bagages : oui Rampe pour bagages : non Cairn - Défibrillateur + Défibrillateur;DAE Défibrillateur : oui Type : tumulus Type : columbarium From e09363730adf9264b79dab563e63e12be5d146a0 Mon Sep 17 00:00:00 2001 From: Eduardo Addad de Oliveira Date: Mon, 23 Sep 2024 01:36:41 +0000 Subject: [PATCH 10/37] Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.4% (5271 of 5302 strings) --- OsmAnd/res/values-pt-rBR/strings.xml | 33 ++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/OsmAnd/res/values-pt-rBR/strings.xml b/OsmAnd/res/values-pt-rBR/strings.xml index f9730411dfd..7eb7bd8aedc 100644 --- a/OsmAnd/res/values-pt-rBR/strings.xml +++ b/OsmAnd/res/values-pt-rBR/strings.xml @@ -5886,4 +5886,37 @@ Aumentar Mostrar trilhas de terra para bicicletas Diminuir + V + Wikimedia + Abrir no navegador + Fonte + Sem conexão com a internet + Verifique sua conexão e tente novamente. + Nenhuma foto de usuário foi adicionada a este local ainda + Não há fotos disponíveis + Nenhum tipo de combustível fornecido + Gasolina + Metanol + Etanol + Diesel + GLP + GNV + Propano + Elétrico + Híbrido a gasolina + Híbrido a diesel + Híbrido regenerativo + Hidrogênio + Tipo de combustível desconhecido + Métricas de veículos + % + Temperatura do ar de entrada + Temperatura do ar ambiente + Voltagem da bateria + Temperatura do líquido de arrefecimento do motor + Nível de combustível + Taxa de consumo de combustível + Combustível restante (distância) + Tipo de combustível + Métricas de veículos \ No newline at end of file From 2d43f848cb7356a0a79a668a0788081874a38d2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=86Verdulo?= Date: Sun, 22 Sep 2024 23:09:50 +0000 Subject: [PATCH 11/37] Translated using Weblate (Esperanto) Currently translated at 99.2% (5260 of 5302 strings) --- OsmAnd/res/values-eo/strings.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 130b3938d45..836056b6eee 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -5897,4 +5897,16 @@ Kontrolu vian retkonekton kaj reprovu. Neniu foto de uzanto aldonita al tiu ĉi loko Neniu disponebla foto + benzino + metanolo + etanolo + neraportata speco de brulaĵo + dizeloleo + LPG + CNG + propano + elektro + plurbrulaĵa, nun benzino + plurbrulaĵa, nun metanolo + V \ No newline at end of file From 3edb5fe88dab7f6e12c092c1eae08c025b5c391f Mon Sep 17 00:00:00 2001 From: ZeljkoBG Date: Sun, 22 Sep 2024 09:21:36 +0000 Subject: [PATCH 12/37] Translated using Weblate (Serbian (Latin script)) Currently translated at 99.0% (5249 of 5302 strings) --- OsmAnd/res/values-b+sr+Latn/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-b+sr+Latn/strings.xml b/OsmAnd/res/values-b+sr+Latn/strings.xml index 1d344f4c288..742d9563431 100644 --- a/OsmAnd/res/values-b+sr+Latn/strings.xml +++ b/OsmAnd/res/values-b+sr+Latn/strings.xml @@ -5908,4 +5908,5 @@ Još uvek nije dodata nijedna korisnička fotografija na ovu lokaciju Nema dostupnih fotografija Vikimedia + V \ No newline at end of file From 15e30d1809591215ddc87e0d56e6d0135a8dd8ea Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Mon, 23 Sep 2024 03:38:44 +0000 Subject: [PATCH 13/37] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-zh-rTW/strings.xml | 56 +++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/OsmAnd/res/values-zh-rTW/strings.xml b/OsmAnd/res/values-zh-rTW/strings.xml index 4e5a5374a8c..ced168203f6 100644 --- a/OsmAnd/res/values-zh-rTW/strings.xml +++ b/OsmAnd/res/values-zh-rTW/strings.xml @@ -4650,7 +4650,7 @@ 柴油 汽油 液化石油氣 - 天然氣 + 壓縮天然氣 引擎使用的燃料 中庫德語 已更新:%1$s。 @@ -5892,4 +5892,58 @@ 請檢查您的連線並再試一次。 尚未將使用者照片新增至此處 沒有可用的照片 + V + 未提供燃料類型 + 汽油 + 甲醇 + 乙醇 + 柴油 + 液化石油氣 + 壓縮天然氣 + 丙烷 + 電力 + 雙燃料汽油 + 雙燃料甲醇 + 雙燃料乙醇 + 雙燃料液化石油氣 + 雙燃料壓縮天然氣 + 雙燃料丙烷 + 雙燃料電力 + 雙燃料電動與內燃機 + 混合動力汽油 + 混合動力乙醇 + 混合動力柴油 + 混合動力電動 + 混合動力電動與內燃機 + 混合動力再生能源 + 雙燃料氫氣 + 混合動力氫氣 + 氫氣 + 未知燃料類型 + OBD + 車輛指標 + % + RPM + rpm + 透過 OBD 感應器顯示車速 + 透過 OBD 感應器顯示車輛轉速表 RPM + 透過 OBD 感應器顯示車輛進氣溫度 + 透過 OBD 感應器顯示環境空氣溫度 + 透過 OBD 感應器顯示引擎冷卻溫度 + 透過 OBD 感應器顯示電池電壓 + 透過 OBD 感應器顯示車輛油量 + 透過 OBD 感應器顯示車輛剩餘油量的行駛距離 + 透過 OBD 感應器顯示車輛燃料類型 + 進氣溫度 + 環境空氣溫度 + 電池電壓 + 引擎冷卻溫度 + 油量 + 油耗 + 顯示以 OBD 感應器位置為基礎的油耗 + 剩餘燃料(距離) + 燃料類型 + 車輛指標 + 透過 OBD 協定存取您的車輛資訊 + OBD 支援 \ No newline at end of file From f01edd806e766afb5c4fe169104a25f252e59788 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Mon, 23 Sep 2024 09:48:05 +0300 Subject: [PATCH 14/37] Improve loadGpxItems with bulk load. Drop redundant progress call. --- .../net/osmand/shared/gpx/GpxDbHelper.kt | 36 ++++++++++++++++--- .../shared/gpx/TrackFolderLoaderTask.kt | 4 --- .../shared/gpx/filters/TrackFolderAnalysis.kt | 2 +- 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxDbHelper.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxDbHelper.kt index c5fe8dce9bc..6dbc71dab86 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxDbHelper.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxDbHelper.kt @@ -4,6 +4,11 @@ import co.touchlab.stately.collections.ConcurrentMutableList import co.touchlab.stately.collections.ConcurrentMutableMap import co.touchlab.stately.concurrency.Synchronizable import co.touchlab.stately.concurrency.synchronize +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.runBlocking import net.osmand.shared.api.SQLiteAPI.SQLiteConnection import net.osmand.shared.data.StringIntPair @@ -11,7 +16,7 @@ import net.osmand.shared.extensions.currentTimeMillis import net.osmand.shared.gpx.GpxReader.GpxDbReaderCallback import net.osmand.shared.io.KFile import net.osmand.shared.util.LoggerFactory -import kotlin.random.Random + object GpxDbHelper : GpxDbReaderCallback { val log = LoggerFactory.getLogger("GpxDbHelper") @@ -51,19 +56,34 @@ object GpxDbHelper : GpxDbReaderCallback { private suspend fun loadGpxItems() { val start = currentTimeMillis() val items = getItems() - val fileExistenceMap = items.associate { it.file to it.file.exists() } + val startEx = currentTimeMillis() + val fileExistenceMap = getFileExistenceMap(items) + log.info("Time to getFileExistenceMap ${currentTimeMillis() - startEx} ms, ${items.size} items") + val itemsToCache = mutableMapOf() + val itemsToRemove = mutableSetOf() items.forEach { item -> val file = item.file if (fileExistenceMap[file] == true) { - dataItems[file] = item + itemsToCache[file] = item } else { - remove(file) + itemsToRemove.add(file) } } + putToCacheBulk(itemsToCache); + removeFromCacheBulk(itemsToRemove); log.info("Time to loadGpxItems ${currentTimeMillis() - start} ms, ${items.size} items") } + private suspend fun getFileExistenceMap( + items: List, + batchSize: Int = 100 + ): Map = coroutineScope { + items.chunked(batchSize).map { batch -> + async(Dispatchers.IO) { batch.associate { it.file to it.file.exists() } } + }.awaitAll().fold(mutableMapOf()) { acc, map -> acc.apply { putAll(map) } } + } + private fun loadGpxDirItems() { val start = currentTimeMillis() val items = getDirItems() @@ -96,6 +116,14 @@ object GpxDbHelper : GpxDbReaderCallback { } } + private fun putToCacheBulk(itemsToCache: Map) { + dataItems.putAll(itemsToCache) + } + + private fun removeFromCacheBulk(filesToRemove: Set) { + dataItems.keys.removeAll(filesToRemove) + } + fun rename(currentFile: KFile, newFile: KFile): Boolean { val success = database.rename(currentFile, newFile) if (success) { diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt index fb0f28aa53e..6645a594085 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt @@ -64,10 +64,6 @@ class TrackFolderLoaderTask( Companion.cachedRootFolder = TrackFolder(folder) } - if (progress.isNotEmpty()) { - publishProgress(*progress.toTypedArray()) - } - listener.tracksLoaded(folder) log.info("Finished loading tracks. Took ${currentTimeMillis() - start}ms") diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt index fd65840b1ea..1d63e7db6f5 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt @@ -31,7 +31,7 @@ class TrackFolderAnalysis(folder: TracksGroup) { items.addAll(folder.getTrackItems()) } var totalDistanceSum = 0.0 - for (trackItem in items.sortedBy { it.name }) { + for (trackItem in items) { val dataItem = trackItem.dataItem val analysis = dataItem?.getAnalysis() if (analysis != null) { From f2e83fe8c1e90ac89073f6ad90b222995bc404e7 Mon Sep 17 00:00:00 2001 From: chumv Date: Mon, 23 Sep 2024 11:10:19 +0300 Subject: [PATCH 15/37] Fix possible AndroidRuntimeException --- .../mapcontextmenu/gallery/GalleryDetailsFragment.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/gallery/GalleryDetailsFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/gallery/GalleryDetailsFragment.java index 76670ce4c0e..2eb1b9e9a94 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/gallery/GalleryDetailsFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/gallery/GalleryDetailsFragment.java @@ -156,7 +156,12 @@ private void buildItem(@NonNull ViewGroup container, @NonNull String title, @Non return true; }); if (isUrl) { - view.setOnClickListener(v -> AndroidUtils.openUrl(app, description, nightMode)); + view.setOnClickListener(v -> { + FragmentActivity activity = getActivity(); + if (activity != null) { + AndroidUtils.openUrl(activity, description, nightMode); + } + }); } container.addView(view); From d82e1719b10a10dcfe660ae7d102759a40046abb Mon Sep 17 00:00:00 2001 From: chumv Date: Mon, 23 Sep 2024 12:38:44 +0300 Subject: [PATCH 16/37] Add MapButtonsLayout --- OsmAnd/res/layout/map_hud_quick_actions.xml | 4 +- .../plus/views/controls/MapButtonsLayout.java | 130 ++++++++++++++++++ .../controls/maphudbuttons/MapButton.java | 29 +++- .../maphudbuttons/MapButtonTouchListener.java | 28 +--- .../views/layers/MapQuickActionLayer.java | 2 +- .../views/layers/base/OsmandMapLayer.java | 30 ++-- 6 files changed, 185 insertions(+), 38 deletions(-) create mode 100644 OsmAnd/src/net/osmand/plus/views/controls/MapButtonsLayout.java diff --git a/OsmAnd/res/layout/map_hud_quick_actions.xml b/OsmAnd/res/layout/map_hud_quick_actions.xml index 7c68f69dfcf..85610c4afe5 100644 --- a/OsmAnd/res/layout/map_hud_quick_actions.xml +++ b/OsmAnd/res/layout/map_hud_quick_actions.xml @@ -4,8 +4,8 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - intersections = initBoundIntersections(button); + LayoutParams params = (LayoutParams) button.getLayoutParams(); + + if (OsmandMapLayer.intersects(intersections, currentBounds, false)) { + params = updateButtonPosition(button, intersections); + } + params.rightMargin = snapToGrid(params.rightMargin); + params.bottomMargin = snapToGrid(params.bottomMargin); + + button.setLayoutParams(params); + button.saveMargins(); + } + + @NonNull + private QuadTree initBoundIntersections(@NonNull MapButton button) { + QuadTree intersections = OsmandMapLayer.initBoundIntersections(getWidth(), getHeight()); + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child != button && child instanceof MapButton) { + QuadRect rect = getRect((MapButton) child); + intersections.insert(rect, new QuadRect(rect)); + } + } + return intersections; + } + + @NonNull + private LayoutParams updateButtonPosition(@NonNull MapButton button, @NonNull QuadTree intersections) { + LayoutParams originalParams = (LayoutParams) button.getLayoutParams(); + LayoutParams params = new LayoutParams(originalParams); + + int maxStepsX = getWidth() / gridSize; + int maxStepsY = getHeight() / gridSize; + int maxSteps = Math.max(maxStepsX, maxStepsY); + int minRightMargin = getWidth() - button.getWidth(); + int minBottomMargin = getHeight() - button.getHeight(); + + for (int step = 1; step <= maxSteps; step++) { + for (double[] direction : DIRECTIONS) { + int newRightMargin = (int) (originalParams.rightMargin + direction[0] * step * gridSize); + int newBottomMargin = (int) (originalParams.bottomMargin + direction[1] * step * gridSize); + + params.rightMargin = Math.max(0, Math.min(newRightMargin, minRightMargin)); + params.bottomMargin = Math.max(0, Math.min(newBottomMargin, minBottomMargin)); + + QuadRect rect = getRect(button, params); + if (!OsmandMapLayer.intersects(intersections, rect, false)) { + return params; + } + } + } + return originalParams; + } + + @NonNull + private static QuadRect getRect(@NonNull MapButton button) { + return getRect(button, (LayoutParams) button.getLayoutParams()); + } + + @NonNull + private static QuadRect getRect(@NonNull MapButton button, @NonNull LayoutParams params) { + int size = button.getSize(); + return new QuadRect(params.rightMargin + size, params.bottomMargin + size, params.rightMargin, params.bottomMargin); + } + + private int snapToGrid(int margin) { + return Math.round((float) margin / gridSize) * gridSize; + } + + private static double[][] getAvailableDirections() { + double[][] directions = new double[16][2]; + for (int i = 0; i < 16; i++) { + double angle = Math.toRadians(i * 22.5); + directions[i][0] = Math.cos(angle); + directions[i][1] = Math.sin(angle); + } + return directions; + } +} \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java index b91bf182481..780a1954658 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java @@ -47,6 +47,7 @@ import net.osmand.plus.utils.ColorUtilities; import net.osmand.plus.utils.UiUtilities; import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.plus.views.controls.MapButtonsLayout; import net.osmand.plus.views.layers.base.OsmandMapLayer; import net.osmand.plus.views.mapwidgets.WidgetsVisibilityHelper; import net.osmand.plus.views.mapwidgets.configure.buttons.MapButtonState; @@ -178,7 +179,7 @@ public void setUseCustomPosition(boolean useCustomPosition) { setScaleX(1.5f); setScaleY(1.5f); setAlpha(0.95f); - setOnTouchListener(new MapButtonTouchListener(mapActivity, marginPreference)); + setOnTouchListener(new MapButtonTouchListener()); return true; }); } @@ -271,7 +272,7 @@ protected void updateIcon() { } protected void updateSize() { - int size = AndroidUtils.dpToPx(getContext(), appearanceParams.getSize()) + shadowPadding; + int size = getSize() + shadowPadding; ViewGroup.LayoutParams params = getLayoutParams(); params.height = size; params.width = size; @@ -280,8 +281,8 @@ protected void updateSize() { protected void updateBackground() { Context context = getContext(); + int size = getSize(); float opacity = appearanceParams.getOpacity(); - int size = AndroidUtils.dpToPx(context, appearanceParams.getSize()); int cornerRadius = AndroidUtils.dpToPx(context, appearanceParams.getCornerRadius()); GradientDrawable normal = new GradientDrawable(); @@ -384,6 +385,28 @@ public void updateMargins() { setFabButtonMargin(mapActivity, this, margins, defMargins.first, defMargins.second); } } + ViewParent parent = getParent(); + if (parent instanceof MapButtonsLayout layout) { + layout.updateButton(this); + } + } + + public void saveMargins() { + MapButtonState buttonState = getButtonState(); + FabMarginPreference preference = buttonState != null ? buttonState.getFabMarginPref() : null; + if (mapActivity != null && useCustomPosition && preference != null) { + MarginLayoutParams params = (MarginLayoutParams) getLayoutParams(); + if (AndroidUiHelper.isOrientationPortrait(mapActivity)) { + preference.setPortraitFabMargin(params.rightMargin, params.bottomMargin); + } else { + preference.setLandscapeFabMargin(params.rightMargin, params.bottomMargin); + } + } + } + + public int getSize() { + ButtonAppearanceParams params = appearanceParams != null ? appearanceParams : getAppearanceParams(); + return AndroidUtils.dpToPx(getContext(), params.getSize()); } @NonNull diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java index 84be97cd9f5..44a55dcb372 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButtonTouchListener.java @@ -5,31 +5,22 @@ import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup.MarginLayoutParams; +import android.view.ViewParent; import android.widget.FrameLayout; import androidx.annotation.NonNull; import net.osmand.plus.R; -import net.osmand.plus.activities.MapActivity; -import net.osmand.plus.helpers.AndroidUiHelper; -import net.osmand.plus.settings.backend.preferences.FabMarginPreference; import net.osmand.plus.utils.AndroidUtils; +import net.osmand.plus.views.controls.MapButtonsLayout; public class MapButtonTouchListener implements OnTouchListener { - private final MapActivity activity; - private final FabMarginPreference preference; - private int initialMarginX = 0; private int initialMarginY = 0; private float initialTouchX = 0; private float initialTouchY = 0; - public MapButtonTouchListener(@NonNull MapActivity activity, @NonNull FabMarginPreference preference) { - this.activity = activity; - this.preference = preference; - } - @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouch(View view, MotionEvent event) { @@ -45,8 +36,10 @@ public boolean onTouch(View view, MotionEvent event) { view.setScaleY(1); view.setAlpha(1f); - updatePreference(view); - + ViewParent parent = view.getParent(); + if (parent instanceof MapButtonsLayout layout) { + layout.updateButton((MapButton) view); + } return true; } case MotionEvent.ACTION_MOVE -> { @@ -74,15 +67,6 @@ public boolean onTouch(View view, MotionEvent event) { return false; } - private void updatePreference(@NonNull View view) { - FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams(); - if (AndroidUiHelper.isOrientationPortrait(activity)) { - preference.setPortraitFabMargin(params.rightMargin, params.bottomMargin); - } else { - preference.setLandscapeFabMargin(params.rightMargin, params.bottomMargin); - } - } - private int interpolate(int value, int divider, int boundsSize) { if (value <= divider && value > 0) { return value * value / divider; diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapQuickActionLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapQuickActionLayer.java index d33b3f82782..e624951cec9 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/MapQuickActionLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/MapQuickActionLayer.java @@ -120,7 +120,7 @@ private void updateButtons() { if (activity != null) { boolean nightMode = app.getDaynightHelper().isNightMode(); LayoutInflater inflater = UiUtilities.getInflater(activity, nightMode); - ViewGroup container = activity.findViewById(R.id.quick_actions_container); + ViewGroup container = activity.findViewById(R.id.map_buttons_container); container.removeAllViews(); List buttons = new ArrayList<>(); diff --git a/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java index 203c3caef1c..d7b5fb00156 100644 --- a/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java +++ b/OsmAnd/src/net/osmand/plus/views/layers/base/OsmandMapLayer.java @@ -234,7 +234,7 @@ public void onPrepareBufferImage(Canvas canvas, RotatedTileBox tileBox, DrawSett } } - protected void updateResources(){ + protected void updateResources() { } @@ -339,23 +339,33 @@ public float getDensity() { } @NonNull - public static QuadTree initBoundIntersections(RotatedTileBox tileBox) { - QuadRect bounds = new QuadRect(0, 0, tileBox.getPixWidth(), tileBox.getPixHeight()); + public static QuadTree initBoundIntersections(@NonNull RotatedTileBox tileBox) { + return initBoundIntersections(tileBox.getPixWidth(), tileBox.getPixHeight()); + } + + @NonNull + public static QuadTree initBoundIntersections(float width, float height) { + QuadRect bounds = new QuadRect(0, 0, width, height); bounds.inset(-bounds.width() / 4, -bounds.height() / 4); return new QuadTree<>(bounds, 4, 0.6f); } - public static boolean intersects(QuadTree boundIntersections, float x, float y, float width, float height) { - List result = new ArrayList<>(); + public static boolean intersects(@NonNull QuadTree boundIntersections, float x, float y, float width, float height) { QuadRect visibleRect = calculateRect(x, y, width, height); - boundIntersections.queryInBox(new QuadRect(visibleRect.left, visibleRect.top, visibleRect.right, visibleRect.bottom), result); - for (QuadRect r : result) { - if (QuadRect.intersects(r, visibleRect)) { + return intersects(boundIntersections, visibleRect, true); + } + + public static boolean intersects(@NonNull QuadTree boundIntersections, @NonNull QuadRect visibleRect, boolean insert) { + List result = new ArrayList<>(); + boundIntersections.queryInBox(new QuadRect(visibleRect), result); + for (QuadRect rect : result) { + if (QuadRect.intersects(rect, visibleRect)) { return true; } } - boundIntersections.insert(visibleRect, - new QuadRect(visibleRect.left, visibleRect.top, visibleRect.right, visibleRect.bottom)); + if (insert) { + boundIntersections.insert(visibleRect, new QuadRect(visibleRect)); + } return false; } From e0b781e9df29f11b0735c6b2a67f92374e6a4e92 Mon Sep 17 00:00:00 2001 From: chumv Date: Mon, 23 Sep 2024 14:37:32 +0300 Subject: [PATCH 17/37] Fix #20867 --- .../backend/backup/items/QuickActionsSettingsItem.java | 6 +++--- .../configure/buttons/QuickActionButtonState.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/items/QuickActionsSettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/items/QuickActionsSettingsItem.java index a17b161299a..2bb4f677463 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/items/QuickActionsSettingsItem.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/items/QuickActionsSettingsItem.java @@ -135,7 +135,7 @@ private void readButtonState(@NonNull JSONObject json) { buttonState.setEnabled(object.getBoolean("enabled")); String iconName = object.optString("icon"); - if (Algorithms.isEmpty(iconName)) { + if (!Algorithms.isEmpty(iconName)) { buttonState.getIconPref().set(iconName); } int size = object.optInt("size"); @@ -143,11 +143,11 @@ private void readButtonState(@NonNull JSONObject json) { buttonState.getSizePref().set(size); } int cornerRadius = object.optInt("corner_radius"); - if (cornerRadius > 0) { + if (cornerRadius >= 0) { buttonState.getCornerRadiusPref().set(cornerRadius); } float opacity = (float) object.optDouble("opacity"); - if (opacity > 0) { + if (opacity >= 0) { buttonState.getOpacityPref().set(opacity); } } else { diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java index c3421c05490..edd6afd87eb 100644 --- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java +++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/configure/buttons/QuickActionButtonState.java @@ -198,7 +198,7 @@ public boolean isDefaultButton() { @Override public ButtonAppearanceParams createAppearanceParams() { ButtonAppearanceParams appearanceParams = super.createAppearanceParams(); - if (!iconPref.isSet()) { + if (Algorithms.isEmpty(iconPref.get())) { if (isSingleAction()) { int iconId = getQuickActions().get(0).getIconRes(app); if (iconId > 0) { From 37bcf082936baed4508fce54d71c75be5b279af9 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Mon, 23 Sep 2024 15:20:19 +0300 Subject: [PATCH 18/37] Fix param name --- .../commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt index 33b8e5bb00d..709d47dd872 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt @@ -729,10 +729,10 @@ object GpxUtilities { progress?.progress(1) } - fun assignExtensionWriter(wptPt: WptPt, pluginsExtensions: Map) { + fun assignExtensionWriter(wptPt: WptPt, extensions: Map) { val regularExtensions = HashMap() val gpxtpxExtensions = HashMap() - for ((key, value) in pluginsExtensions) { + for ((key, value) in extensions) { if (key.startsWith(GPXTPX_PREFIX)) { gpxtpxExtensions[key] = value } else { From f61c6715a84473f79e3d5b68fde17d34ea761a5b Mon Sep 17 00:00:00 2001 From: D M Date: Mon, 23 Sep 2024 07:06:08 +0000 Subject: [PATCH 19/37] Translated using Weblate (Serbian) Currently translated at 99.0% (5249 of 5302 strings) --- OsmAnd/res/values-sr/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index 655d5151fa8..0f884ab20fe 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -5900,4 +5900,5 @@ Још увек није додата ниједна корисничка фотографија на ову локацију Нема доступних фотографија Викимедиа + V \ No newline at end of file From 48f572d8e3488ee2d333c6b0a546846015177fd9 Mon Sep 17 00:00:00 2001 From: D M Date: Mon, 23 Sep 2024 15:00:18 +0000 Subject: [PATCH 20/37] Translated using Weblate (Serbian) Currently translated at 99.3% (5265 of 5302 strings) --- OsmAnd/res/values-sr/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index 0f884ab20fe..a4376434af7 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -5901,4 +5901,20 @@ Нема доступних фотографија Викимедиа V + Није наведена врста горива + Бензин + Метанол + КПГ + Пропан + Електричан + Двогоривни радни Бензин + Двогоривни радни Метанол + Двогоривни радни Етанол + Двогоривни радни ТНГ + Двогоривни радни КПГ + Двогоривни радни Електрична + Етанол + Дизел + ТНГ + Двогоривни радни Пропан \ No newline at end of file From e0824b6d2221fa329c24be5b98cb2cc36b235882 Mon Sep 17 00:00:00 2001 From: D M Date: Mon, 23 Sep 2024 15:00:40 +0000 Subject: [PATCH 21/37] Translated using Weblate (Serbian (Latin script)) Currently translated at 99.3% (5265 of 5302 strings) --- OsmAnd/res/values-b+sr+Latn/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/OsmAnd/res/values-b+sr+Latn/strings.xml b/OsmAnd/res/values-b+sr+Latn/strings.xml index 742d9563431..b9027da05c9 100644 --- a/OsmAnd/res/values-b+sr+Latn/strings.xml +++ b/OsmAnd/res/values-b+sr+Latn/strings.xml @@ -5909,4 +5909,20 @@ Nema dostupnih fotografija Vikimedia V + Nije navedena vrsta goriva + Benzin + Metanol + Etanol + Dizel + TNG + KPG + Propan + Električna + Dvogorivni radni Benzin + Dvogorivni radni Metanol + Dvogorivni radni Etanol + Dvogorivni radni TNG + Dvogorivni radni KPG + Dvogorivni radni Propan + Dvogorivni radni Električna \ No newline at end of file From 694680eccb27891624c34b90affb6f1acf2750c8 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Mon, 23 Sep 2024 18:15:28 +0300 Subject: [PATCH 22/37] Fix loading tracks task. Fix time span statistics. --- .../src/main/java/net/osmand/gpx/GPXFile.java | 1 + .../main/java/net/osmand/gpx/GPXTrackAnalysis.java | 1 + .../src/main/java/net/osmand/gpx/GPXUtilities.java | 1 + .../src/main/java/net/osmand/gpx/GpxParameter.java | 1 + .../main/java/net/osmand/router/RouteColorize.java | 1 + .../net/osmand/shared/gpx/GpxTrackAnalysis.kt | 4 +++- .../net/osmand/shared/gpx/TrackFolderLoaderTask.kt | 8 +++----- .../net/osmand/shared/gpx/data/TrackFolder.kt | 14 +++++++------- .../shared/gpx/filters/TrackFolderAnalysis.kt | 4 +++- 9 files changed, 21 insertions(+), 14 deletions(-) diff --git a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXFile.java b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXFile.java index b2b41a7006e..2b4e2d21023 100644 --- a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXFile.java +++ b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXFile.java @@ -20,6 +20,7 @@ import java.util.Map; import java.util.Set; +@Deprecated public class GPXFile extends GPXUtilities.GPXExtensions { public String author; diff --git a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXTrackAnalysis.java b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXTrackAnalysis.java index 8a1f03cd83b..5119458d86b 100644 --- a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXTrackAnalysis.java +++ b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXTrackAnalysis.java @@ -22,6 +22,7 @@ import java.util.Objects; import java.util.Set; +@Deprecated public class GPXTrackAnalysis { public static final Log LOG = PlatformUtil.getLog(GPXTrackAnalysis.class); diff --git a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXUtilities.java b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXUtilities.java index f9fd5832968..e7a42961fbb 100644 --- a/OsmAnd-java/src/main/java/net/osmand/gpx/GPXUtilities.java +++ b/OsmAnd-java/src/main/java/net/osmand/gpx/GPXUtilities.java @@ -53,6 +53,7 @@ import java.util.Stack; import java.util.TimeZone; +@Deprecated public class GPXUtilities { public static final Log log = PlatformUtil.getLog(GPXUtilities.class); diff --git a/OsmAnd-java/src/main/java/net/osmand/gpx/GpxParameter.java b/OsmAnd-java/src/main/java/net/osmand/gpx/GpxParameter.java index 47d9409f32a..931c96a17b9 100644 --- a/OsmAnd-java/src/main/java/net/osmand/gpx/GpxParameter.java +++ b/OsmAnd-java/src/main/java/net/osmand/gpx/GpxParameter.java @@ -7,6 +7,7 @@ import java.util.Arrays; import java.util.List; +@Deprecated public enum GpxParameter { FILE_NAME("fileName", "TEXT", String.class, null, false), diff --git a/OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java b/OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java index d0bb9a4a36a..6935b8c693e 100644 --- a/OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java +++ b/OsmAnd-java/src/main/java/net/osmand/router/RouteColorize.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.List; +@Deprecated public class RouteColorize { public static double MAX_CORRECT_ELEVATION_DISTANCE = 100.0;// in meters diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxTrackAnalysis.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxTrackAnalysis.kt index 58a83b519e1..9ebb5daa227 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxTrackAnalysis.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxTrackAnalysis.kt @@ -168,7 +168,9 @@ class GpxTrackAnalysis { set(value) = setGpxParameter(GpxParameter.TOTAL_DISTANCE, value.toDouble()) fun isTimeSpecified(): Boolean { - return startTime != Long.MAX_VALUE && startTime != 0L + val startTime = startTime + val endTime = endTime + return startTime != Long.MAX_VALUE && startTime != 0L && endTime != Long.MIN_VALUE && endTime != 0L } fun isTimeMoving(): Boolean { diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt index 6645a594085..2d58156f439 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/TrackFolderLoaderTask.kt @@ -9,13 +9,10 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import net.osmand.shared.KAsyncTask import net.osmand.shared.extensions.currentTimeMillis -import net.osmand.shared.extensions.format -import net.osmand.shared.gpx.GpxDbHelper.GpxDataItemCallback import net.osmand.shared.gpx.GpxDbHelper.GpxDataItemCallbackEx import net.osmand.shared.gpx.data.TrackFolder import net.osmand.shared.io.KFile import net.osmand.shared.util.LoggerFactory -import net.osmand.shared.util.PlatformUtil class TrackFolderLoaderTask( private val folder: TrackFolder, @@ -73,6 +70,7 @@ class TrackFolderLoaderTask( override fun onPostExecute(result: TrackFolder) { val cachedRootFolder = cachedRootFolder if (result === cachedRootFolder) folder.update(cachedRootFolder) + resetCachedData(folder) listener.loadTracksFinished(folder) SmartFolderHelper.notifyUpdateListeners() } @@ -117,7 +115,7 @@ class TrackFolderLoaderTask( launch { log.info("Loading track subfolder = $subfolder") scanFolder(subfolder, progress, trackItems) - folder.addSubFolder(subfolder) + taskSync.synchronize { folder.addSubFolder(subfolder) } } } else if (GpxHelper.isGpxFile(file)) { val item = TrackItem(file) @@ -141,7 +139,7 @@ class TrackFolderLoaderTask( } } } - folder.addTrackItems(batchTrackItems) + taskSync.synchronize { folder.addTrackItems(batchTrackItems) } } } if (isCancelled()) return@coroutineScope diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/data/TrackFolder.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/data/TrackFolder.kt index 4aa493c0e5f..429754ac594 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/data/TrackFolder.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/data/TrackFolder.kt @@ -12,8 +12,8 @@ class TrackFolder(dirFile: KFile, parentFolder: TrackFolder?) : TracksGroup, ComparableTracksGroup { private var dirFile: KFile private val parentFolder: TrackFolder? - private var trackItems = listOf() - private var subFolders = listOf() + private var trackItems = mutableListOf() + private var subFolders = mutableListOf() private var flattenedTrackItems: List? = null private var flattenedSubFolders: List? = null private var folderAnalysis: TrackFolderAnalysis? = null @@ -29,8 +29,8 @@ class TrackFolder(dirFile: KFile, parentFolder: TrackFolder?) : } fun update(folder: TrackFolder) { - trackItems = folder.trackItems.toList() - subFolders = folder.subFolders.toList() + trackItems = ArrayList(folder.trackItems) + subFolders = ArrayList(folder.subFolders) flattenedTrackItems = folder.flattenedTrackItems?.toList() flattenedSubFolders = folder.flattenedSubFolders?.toList() folderAnalysis = folder.folderAnalysis @@ -76,7 +76,7 @@ class TrackFolder(dirFile: KFile, parentFolder: TrackFolder?) : } fun addSubFolder(subFolder: TrackFolder) { - this.subFolders = KCollectionUtils.addToList(this.subFolders, subFolder) + this.subFolders.add(subFolder) } fun setTrackItems(trackItems: MutableList) { @@ -84,11 +84,11 @@ class TrackFolder(dirFile: KFile, parentFolder: TrackFolder?) : } fun addTrackItem(trackItem: TrackItem) { - this.trackItems = KCollectionUtils.addToList(this.trackItems, trackItem) + this.trackItems.add(trackItem) } fun addTrackItems(trackItems: List) { - this.trackItems = KCollectionUtils.addAllToList(this.trackItems, trackItems) + this.trackItems.addAll(trackItems) } val isEmpty: Boolean diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt index 1d63e7db6f5..ec4aa8ee39c 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/filters/TrackFolderAnalysis.kt @@ -31,6 +31,7 @@ class TrackFolderAnalysis(folder: TracksGroup) { items.addAll(folder.getTrackItems()) } var totalDistanceSum = 0.0 + var timeSpanSum = 0.0 for (trackItem in items) { val dataItem = trackItem.dataItem val analysis = dataItem?.getAnalysis() @@ -43,11 +44,12 @@ class TrackFolderAnalysis(folder: TracksGroup) { fileSize += file.length() } if (analysis.isTimeSpecified()) { - timeSpan = (timeSpan + analysis.getDurationInMs() / 1000.0).toInt() + timeSpanSum += analysis.getDurationInMs() / 1000.0 } } } totalDistance = totalDistanceSum.toFloat() + timeSpan = timeSpanSum.toInt() tracksCount = items.size log.info(">>>> ${folder.getName()} = (tracks: $tracksCount, totalDistance: ${"%.2f".format(totalDistance)}, " + From 688c91657a419caf75c1c0e9c292b0cb875303b7 Mon Sep 17 00:00:00 2001 From: Evgenii Martynenko Date: Mon, 23 Sep 2024 16:36:10 +0000 Subject: [PATCH 23/37] Translated using Weblate (Russian) Currently translated at 98.5% (5224 of 5302 strings) --- OsmAnd/res/values-ru/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-ru/strings.xml b/OsmAnd/res/values-ru/strings.xml index e3b85a64191..0d48b5dff31 100644 --- a/OsmAnd/res/values-ru/strings.xml +++ b/OsmAnd/res/values-ru/strings.xml @@ -5933,4 +5933,5 @@ В это местоположение еще не было добавлено ни одной пользовательской фотографии Нет доступных фотографий Викимедиа + % \ No newline at end of file From 297fefb73df1b91c7b1ef3ae12d5b3ac0c2d81f5 Mon Sep 17 00:00:00 2001 From: D M Date: Mon, 23 Sep 2024 17:22:32 +0000 Subject: [PATCH 24/37] Translated using Weblate (Serbian) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-sr/strings.xml | 53 +++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/OsmAnd/res/values-sr/strings.xml b/OsmAnd/res/values-sr/strings.xml index a4376434af7..10868911f21 100644 --- a/OsmAnd/res/values-sr/strings.xml +++ b/OsmAnd/res/values-sr/strings.xml @@ -5906,15 +5906,52 @@ Метанол КПГ Пропан - Електричан - Двогоривни радни Бензин - Двогоривни радни Метанол - Двогоривни радни Етанол - Двогоривни радни ТНГ - Двогоривни радни КПГ - Двогоривни радни Електрична + Електрично + Двогоривно радно Бензин + Двогоривно радно Метанол + Двогоривно радно Етанол + Двогоривно радно ТНГ + Двогоривно радно КПГ + Двогоривно радно Електрично Етанол Дизел ТНГ - Двогоривни радни Пропан + Двогоривно радно Пропан + Хибридно Бензинско + Хибридно Етанол + Хибридно Дизел + Двогоривно радно Електрична и са УС машина + Хибридно Електрична и са УС машина + Хибридно Регенеративно + Хибридно Водоник + Хибридно Електрично + Водоник + Непознати тип горива + ДНВ + Метрика возила + % + ОУМ + оум + Приказује брзину возила преко ДНВ сензора + Приказује тахометарски ОУМ возила преко ДНВ сензора + Приказује температуру усисног ваздуха возила преко ДНВ сензора + Приказује температуру амбијенталног ваздуха преко ДНВ сензора + Приказује температуру расхладне течности мотора преко ДНВ сензора + Приказује ниво горива у возилу преко ДНВ сензора + Приказује врсту горива возила преко ДНВ сензора + Температура улазног ваздуха + Температура амбијенталног ваздуха + Напон батерије + Температура расхладне течности мотора + Ниво горива + Стопа потрошње горива + Приказује стопу потрошње горива возила на основу ДНВ локације + Преостало гориво (растојање) + Тип горива + Метрика возила + ДНВ подршка + Приступа информацијама о вашем возилу преко ДНВ протокола + Двогоривно радно Водоник + Приказује напон батерије преко ДНВ сензора + Показује раздаљину коју возило може да пређе са преосталим горивом преко ОБД сензора \ No newline at end of file From a8416d274fe83f79ae32606fa0032e563dbca56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=86Verdulo?= Date: Mon, 23 Sep 2024 20:34:07 +0000 Subject: [PATCH 25/37] Translated using Weblate (Esperanto) Currently translated at 99.2% (5261 of 5302 strings) --- OsmAnd/res/values-eo/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 836056b6eee..8e8831a72f0 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -5909,4 +5909,5 @@ plurbrulaĵa, nun benzino plurbrulaĵa, nun metanolo V + plurbrulaĵa, nun etanolo \ No newline at end of file From 1f8e5865d36c33f3761ac508e775d296af8bfcb5 Mon Sep 17 00:00:00 2001 From: D M Date: Mon, 23 Sep 2024 17:28:47 +0000 Subject: [PATCH 26/37] Translated using Weblate (Serbian (Latin script)) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-b+sr+Latn/strings.xml | 55 +++++++++++++++++++++---- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/OsmAnd/res/values-b+sr+Latn/strings.xml b/OsmAnd/res/values-b+sr+Latn/strings.xml index b9027da05c9..627b978df96 100644 --- a/OsmAnd/res/values-b+sr+Latn/strings.xml +++ b/OsmAnd/res/values-b+sr+Latn/strings.xml @@ -3041,7 +3041,7 @@ Dvofazno usmeravanje za auto navigaciju. Preračunava samo početni deo puta, korisno za duga putovanja. Razvoj lokalnog javnog prevoza - Prebaci se na Java (bezbedno) izrečunavanje rute javnog prevoza + Prebaci se na Java (bezbedno) izračunavanje rute javnog prevoza Prijavi se pomoću OAuth -a radi korišćenja mogućnosti uređivanja OpenStritMapa Prijavi se preko OAuth-a Obriši OpenStreetMap OAuth token @@ -5917,12 +5917,49 @@ TNG KPG Propan - Električna - Dvogorivni radni Benzin - Dvogorivni radni Metanol - Dvogorivni radni Etanol - Dvogorivni radni TNG - Dvogorivni radni KPG - Dvogorivni radni Propan - Dvogorivni radni Električna + Električno + Dvogorivno radno Benzin + Dvogorivno radno Metanol + Dvogorivno radno Etanol + Dvogorivno radno TNG + Dvogorivno radno KPG + Dvogorivno radno Propan + Dvogorivno radno Električno + Hibridno Benzinsko + Dvogorivno radno Električna i sa US mašina + Hibridno Etanol + Hibridno Dizel + Hibridno Električna i sa US mašina + Hibridno Regenerativno + Dvogorivno radno Vodonik + Hibridno Vodonik + Vodonik + Nepoznati tip goriva + OBD + Hibridno Električno + Metrika vozila + % + RPM + rpm + Prikazuje brzinu vozila preko OBD senzora + Prikazuje tahometarski RPM preko OBD senzora + Prikazuje temperaturu usisnog vazduha vozila preko OBD senzora + Prikazuje temperaturu ambijentalnog vazduha preko OBD senzora + Prikazuje napon baterije preko OBD senzora + Prikazuje nivo goriva u vozilu preko OBD senzora + Prikazuje vrstu goriva vozila preko OBD senzora + Temperatura ulaznog vazduha + Temperatura ambijentalnog vazduha + Napon baterije + Temperatura rashladne tečnosti motora + Nivo goriva + Stopa potrošnje goriva + Prikazuje stopu potrošnje goriva vozila na osnovu OBD lokacije + Preostalo gorivo (rastojanje) + Tip goriva + Metrika vozila + OBD podrška + Pristupa informacijama o vašem vozilu preko OBD protokola + Prikazuje temperaturu rashladne tečnosti motora preko OBD senzora + Pokazuje razdaljinu koju vozilo može da pređe sa preostalim gorivom preko OBD senzora \ No newline at end of file From 7218973da95c408c6f47be8add6bf6557e1303ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=86Verdulo?= Date: Mon, 23 Sep 2024 20:35:50 +0000 Subject: [PATCH 27/37] Translated using Weblate (Esperanto) Currently translated at 99.3% (5267 of 5302 strings) --- OsmAnd/res/values-eo/strings.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 8e8831a72f0..2def64f0276 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -5910,4 +5910,10 @@ plurbrulaĵa, nun metanolo V plurbrulaĵa, nun etanolo + plurbrulaĵa, nun LPG + plurbrulaĵa, nun CNG + plurbrulaĵa, nun propano + plurbrulaĵa, nun elektro + plurbrulaĵa, nun elektro kaj brulmotoro + hibrida, nun benzino \ No newline at end of file From 0fca921d78e8440636890f821632587a8dc755b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=86Verdulo?= Date: Mon, 23 Sep 2024 21:06:23 +0000 Subject: [PATCH 28/37] Translated using Weblate (Esperanto) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-eo/strings.xml | 35 ++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/OsmAnd/res/values-eo/strings.xml b/OsmAnd/res/values-eo/strings.xml index 2def64f0276..0b13e4531e1 100644 --- a/OsmAnd/res/values-eo/strings.xml +++ b/OsmAnd/res/values-eo/strings.xml @@ -5916,4 +5916,39 @@ plurbrulaĵa, nun elektro plurbrulaĵa, nun elektro kaj brulmotoro hibrida, nun benzino + hibrida, nun etanolo + hibrida, nun dizeloleo + hibrida, nun elektro + hibrida, nun elektro kaj brulmotoro + hibrida, nun reutiligo + plurbrulaĵa, nun hidrogeno + hibrida, nun hidrogeno + nekonata speco de brulaĵo + Statistikoj pri veturilo + % + Rivolua rapido + riv./min + Montras rapidon de veturilo raportatan de OBD-sentilo + Montras temperaturon de eniga aero raportatan de OBD-sentilo + Montras nivelon de brulaĵo raportatan de OBD-sentilo + Montras vetureblan distancon per la nuna brulaĵ-nivelo raportatan de OBD-sentilo + Montras temperaturon de fona aero raportatan de OBD-sentilo + Montras tension de baterio raportatan de OBD-sentilo + Temperaturo de eniga aero + Temperaturo de fona aero + Tensio de baterio + Temperaturo de malvarmiga likvaĵo + Brulaĵ-nivelo + Statistikoj pri veturilo + Konsum-rapido de brulaĵo + Montras konsum-rapidon de brulaĵo raportatan de OBD-sentilo + Brulaĵ-nivelo (distanco) + Speco de brulaĵo + Liveras informojn pri via veturilo raportatajn per la protokolo OBD. + Subteno por OBD + hidrogeno + OBD + Montras rivoluan rapidon de motoro raportatan de OBD-sentilo + Montras specon de brulaĵo raportatan de OBD-sentilo + Montras temperaturon de malvarmiga likvaĵo raportatan de OBD-sentilo \ No newline at end of file From 10417b46d44be25f54cb064e7525b00537e883f7 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Tue, 24 Sep 2024 12:28:17 +0300 Subject: [PATCH 29/37] Fix NativeFile for iOS --- .../src/iosMain/kotlin/net/osmand/shared/io/NativeFile.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/OsmAnd-shared/src/iosMain/kotlin/net/osmand/shared/io/NativeFile.kt b/OsmAnd-shared/src/iosMain/kotlin/net/osmand/shared/io/NativeFile.kt index ad8c5279ddf..ef4fc9ae61c 100644 --- a/OsmAnd-shared/src/iosMain/kotlin/net/osmand/shared/io/NativeFile.kt +++ b/OsmAnd-shared/src/iosMain/kotlin/net/osmand/shared/io/NativeFile.kt @@ -17,9 +17,7 @@ actual class NativeFile actual constructor(actual val file: KFile) { private val filePath = file.path() - actual fun absolutePath(): String { - TODO("Not yet implemented") - } + actual fun absolutePath(): String = filePath actual fun isDirectory(): Boolean { return memScoped { From 7b3abe5c76e4fa79e46e217a0f37fc39f92962bc Mon Sep 17 00:00:00 2001 From: gallegonovato Date: Tue, 24 Sep 2024 08:43:56 +0000 Subject: [PATCH 30/37] Translated using Weblate (Spanish) Currently translated at 100.0% (5302 of 5302 strings) --- OsmAnd/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values-es/strings.xml b/OsmAnd/res/values-es/strings.xml index 4668ca7da3f..79c901186fc 100644 --- a/OsmAnd/res/values-es/strings.xml +++ b/OsmAnd/res/values-es/strings.xml @@ -5820,7 +5820,7 @@ Icono de posición de navegación Icono que se muestra cuando no te estás moviendo. Icono de tu ubicación cuando estás parado - Icono de perfil + Icono del perfil Icono que se muestra mientras navegas o te mueves. Pálido Posición de navegación From ab1a70b68b9a94ba5fb9b3e84294a6a245583306 Mon Sep 17 00:00:00 2001 From: ERYpTION Date: Tue, 24 Sep 2024 08:40:13 +0000 Subject: [PATCH 31/37] Translated using Weblate (Danish) Currently translated at 99.3% (5269 of 5302 strings) --- OsmAnd/res/values-da/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/OsmAnd/res/values-da/strings.xml b/OsmAnd/res/values-da/strings.xml index b813e2364a3..7c0a7ffc45d 100644 --- a/OsmAnd/res/values-da/strings.xml +++ b/OsmAnd/res/values-da/strings.xml @@ -5821,16 +5821,16 @@ \nIDLE 1k: %4$s Vælg kortets orientering Alle ikoner - Ikonet vises, mens du navigerer eller bevæger dig. + Ikon, der vises, mens du navigerer eller bevæger dig. Ikon for hvileposition Bleg - Profil-ikon + Profilikon Ikon for navigationsposition - Ikonet vises, når du ikke er i bevægelse. + Ikon, der vises, når du ikke bevæger dig. Navigationsposition Hvile- og navigationsposition Viser det kegleformede område, du aktuelt vender mod - Synsvinkel + Betragtningsvinkel Viser det cirkulære område, der repræsenterer din aktuelle placeringsnøjagtighed Placeringsradius Hvileposition From 322449f2f4a668c73eb7f6e9e55f87c32e03d363 Mon Sep 17 00:00:00 2001 From: "Miguel A. Bouzada" Date: Tue, 24 Sep 2024 09:38:19 +0000 Subject: [PATCH 32/37] Translated using Weblate (Galician) Currently translated at 78.6% (3831 of 4873 strings) --- OsmAnd/res/values-gl/phrases.xml | 78 ++++++++++++++++---------------- 1 file changed, 40 insertions(+), 38 deletions(-) diff --git a/OsmAnd/res/values-gl/phrases.xml b/OsmAnd/res/values-gl/phrases.xml index 2813d3f0861..a4e46d38828 100644 --- a/OsmAnd/res/values-gl/phrases.xml +++ b/OsmAnd/res/values-gl/phrases.xml @@ -66,7 +66,7 @@ Rodas Inspección técnica de vehículos Lavado de automóbiles - Gasolineira;Estación de combustíbel;Estación de servizo + Gasolineira;Estación de servizo;Estación de combustíbel Ar comprimido Aparcadoiro Aparcadoiro de motos @@ -78,9 +78,9 @@ Parada de tranvía Estación de transporte público Entrada de metro - Si + Si;Estación de metro Parada de taxis - Aeroporto + Aeroporto;Aeródromo Heliporto Faro Alugamento de bicicletas @@ -219,8 +219,8 @@ Hotel Hostal Motel - Refuxio alpino - Chalé + Cabana alpina;Refuxio de montaña + Chalé;Refuxio Lugar de culto Cristiandade Xudaísmo @@ -271,7 +271,7 @@ Teatro Circo Salón de baile - Clube nocturno + Discoteca;Club nocturno Couto pesqueiro Minigolf Parque infantil @@ -318,7 +318,7 @@ Limpeza en seco Lavandaría Alugamento de automóbiles - Servizos + Baño;Aseos;Servizos;Latrina Sauna Prostíbulo Tanatorio @@ -426,7 +426,7 @@ Parada de bus Parada de tranvía Estación de autobuses - Estación de trens + Estación ferroviaria;Estación de trens Terminal dos ferris Atalaia Campanil @@ -490,7 +490,7 @@ Silo Tanque de almacenamento País - Si + Si;Capital de provincia Vivenda illada Área residencial Foniatra @@ -688,11 +688,11 @@ Obxecto abandoado En desuso Marca - Si + Si;Auga potábel Non Vixiado Non vixiado - Si + Si;De temporada Non Estación seca Estación húmida @@ -704,7 +704,7 @@ Sen semáforo Sen marcas Data de comezo - Si + Si;Cadeira de rodas Acceso privado Sen acceso Acceso permisivo @@ -742,7 +742,7 @@ Diesel GTL Diesel HGV Biogás - Plataforma de trens + Andén ferroviario;Andén de ferrocarril;Andén de trens Aparellos eléctricos Pomar Estación de seguemento @@ -794,8 +794,8 @@ Atracción turística Animal (atracción) Tobogán de auga - Refuxio - Refuxio de caza + Cabana illada;Refuxio + Cabana de cazadores;Refuxio Universalismo unitario Adega Parque de neve @@ -866,7 +866,7 @@ Manual Automática Sen bomba - Si + Si;Billa;Bomba de auga Mineralizada Sulfurosa Taboleiro @@ -896,7 +896,7 @@ Dedicado a fumadores Portaxe Sen portaxe - Si + Si:Sinais de tráfico sonoras Son: non Área de servizo Lugar para observar paxaros @@ -932,7 +932,7 @@ Lugares reservados para familias Capacidade por hora Tempo medio da viaxe, minutos - Si + Si;Calefacción Sen calefación Permitido Bicicleta: non permitida @@ -1246,7 +1246,7 @@ Limitador da altitude Pasaxe para cabalos Operador - Si + Si;Taxa Non Accesibilidade para cadeiras de rodas Acceso do destino @@ -1263,16 +1263,16 @@ Terminal Mapa de roteiros Modelo táctil - Si + Si;Cuberto Sen lareira Descuberto - Si + Si;Pavimento táctil Pasaxe a nivel Equitación Área de lecer común Xardín Herba - Si + Si;Espazo para persoas con discapacidade Non hai prazas reservadas para persoas con deficiencias Prazas reservadas para persoas con deficiencias Efectivo @@ -1390,7 +1390,7 @@ Tipo de glaciar Tipo de posto de control Tenda de ultramarinos - Parada de tren + Parada de ferrocarril;Parada de tren; Estación de ferrocarril;Estación ferroviaría;Estación de tren;Estación Fin da vía Estabelecemento de comidas Boia de instalación @@ -1750,15 +1750,15 @@ Zona verde Cabalos Respaldo: si - Si - Si - Si - Si - Si - Si - Si - Si - Si + Si;Lareira;Cheminea + Si;No automóbil + Si;Dende o automóbil + Si;Comida para levar + Si;Servizo a domicilio;Reparto + Si;Asentos ao aire libre + Si;Cócteis + Si;Autoservizo + Si;Automatizado Si Si Area @@ -1836,7 +1836,7 @@ SVO (combustíbel vexetal) Estación de combustíbel das aeronaves Estación de combustíbel para embarcacións - Estación de carga eléctrica + Estación de carga;Estación de carga de vehículos eléctricos;Punto de recarga eléctrica;Punto de carga;Estación de carga electrónica;Equipo de subministración de vehículos eléctricos Rampla de vehículos Círculo de xiro Saída da autroestrada @@ -1876,8 +1876,8 @@ Icestock Baloncorf Cabaliños ou carrusel - Cabana - Pendello + Cabana;Refuxio + Pendello;Refuxio Área relixiosa Ermida no camiño Clube da caridade @@ -2114,7 +2114,7 @@ Mercar no automóbil: non Servizo no automóbil: non Nome da cervexaría - Si + Si;Microcervexaría Cervexaría artesá: non Servizo a domicilio: si Servizo a domicilio: non @@ -2128,7 +2128,7 @@ Non fan arranxos Arranxo de automóbiles eléctricos Arranxo de motos - Non + Non;Sen autoservizo Non automatizado Servizo completo Vasoira xiratoria: non @@ -2691,7 +2691,7 @@ Condicións dos chanzos: malas Condicións dos chanzos: pésimas Morea de pedras - Desfibrilador (DEA) + Desfibrilador;DEA Civilización: Roma antiga (do 753 a.C. ó 284 d.C.) Civilización: nurague (do século XVIII a.C. ó II d.C.) Civilização: etrusca (do século XII ó VI a.C.) @@ -3929,4 +3929,6 @@ Medio: cobre Central telefónica Posto de saúde + Auga;Auga potábel + Surtidores automáticos de combustíbel; Máquina expendedora de combustíbel \ No newline at end of file From 1f3c4930b37026d312c7146cdac9014973aa45d5 Mon Sep 17 00:00:00 2001 From: dmpr0 Date: Tue, 24 Sep 2024 12:52:19 +0300 Subject: [PATCH 33/37] Fixed description for compass button --- OsmAnd/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index f8c7df1b00f..6a2eb4a29ff 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -1166,7 +1166,7 @@ You need to activate the sensor so OsmAnd can find it. Visible if map is rotated Always hidden Always visible - Hint: Tap the compass button to switch the map orientation mode. + Double tap the compass button to switch the map orientation mode. Shows direction to north. Depth contour lines color scheme Depth contour line width From 0435fd72f6f9394a6532cd134e37aa7d56661f7f Mon Sep 17 00:00:00 2001 From: chumv Date: Tue, 24 Sep 2024 14:11:57 +0300 Subject: [PATCH 34/37] Fix buttons alignment for #19164 --- .../plus/views/controls/MapButtonsLayout.java | 20 +++++++++++++------ .../controls/maphudbuttons/MapButton.java | 4 ++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/OsmAnd/src/net/osmand/plus/views/controls/MapButtonsLayout.java b/OsmAnd/src/net/osmand/plus/views/controls/MapButtonsLayout.java index 67ad4c59ec4..e09fc432a53 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/MapButtonsLayout.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/MapButtonsLayout.java @@ -55,9 +55,10 @@ public void updateButton(@NonNull MapButton button) { if (OsmandMapLayer.intersects(intersections, currentBounds, false)) { params = updateButtonPosition(button, intersections); } - params.rightMargin = snapToGrid(params.rightMargin); - params.bottomMargin = snapToGrid(params.bottomMargin); - + if (!isSnappedToGrid(params.rightMargin) || !isSnappedToGrid(params.bottomMargin)) { + params.rightMargin = snapToGrid(params.rightMargin); + params.bottomMargin = snapToGrid(params.bottomMargin); + } button.setLayoutParams(params); button.saveMargins(); } @@ -80,11 +81,12 @@ private LayoutParams updateButtonPosition(@NonNull MapButton button, @NonNull Qu LayoutParams originalParams = (LayoutParams) button.getLayoutParams(); LayoutParams params = new LayoutParams(originalParams); + int size = button.getSize(); int maxStepsX = getWidth() / gridSize; int maxStepsY = getHeight() / gridSize; int maxSteps = Math.max(maxStepsX, maxStepsY); - int minRightMargin = getWidth() - button.getWidth(); - int minBottomMargin = getHeight() - button.getHeight(); + int minRightMargin = getWidth() - size; + int minBottomMargin = getHeight() - size; for (int step = 1; step <= maxSteps; step++) { for (double[] direction : DIRECTIONS) { @@ -111,7 +113,13 @@ private static QuadRect getRect(@NonNull MapButton button) { @NonNull private static QuadRect getRect(@NonNull MapButton button, @NonNull LayoutParams params) { int size = button.getSize(); - return new QuadRect(params.rightMargin + size, params.bottomMargin + size, params.rightMargin, params.bottomMargin); + int radius = button.getShadowRadius(); + return new QuadRect(params.rightMargin + size - radius, params.bottomMargin + size - radius, + params.rightMargin + radius, params.bottomMargin + radius); + } + + private boolean isSnappedToGrid(int margin) { + return margin % gridSize == 0; } private int snapToGrid(int margin) { diff --git a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java index 780a1954658..031b87ee7ac 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/maphudbuttons/MapButton.java @@ -409,6 +409,10 @@ public int getSize() { return AndroidUtils.dpToPx(getContext(), params.getSize()); } + public int getShadowRadius() { + return shadowRadius; + } + @NonNull public ButtonAppearanceParams createDefaultAppearanceParams() { return new ButtonAppearanceParams("ic_quick_action", BIG_SIZE_DP, TRANSPARENT_ALPHA, ROUND_RADIUS_DP); From 122bf1821e2b252c7f013d19a942704f796c20e5 Mon Sep 17 00:00:00 2001 From: chumv Date: Tue, 24 Sep 2024 14:18:24 +0300 Subject: [PATCH 35/37] Fix GPXTrackAnalysisUpdatesTest --- .../test/activities/GPXTrackAnalysisUpdatesTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/OsmAnd/test/java/net/osmand/test/activities/GPXTrackAnalysisUpdatesTest.java b/OsmAnd/test/java/net/osmand/test/activities/GPXTrackAnalysisUpdatesTest.java index 39743090552..c5c6a7b3c0a 100644 --- a/OsmAnd/test/java/net/osmand/test/activities/GPXTrackAnalysisUpdatesTest.java +++ b/OsmAnd/test/java/net/osmand/test/activities/GPXTrackAnalysisUpdatesTest.java @@ -17,11 +17,12 @@ import net.osmand.plus.activities.MapActivity; import net.osmand.plus.importfiles.ImportHelper; import net.osmand.plus.importfiles.SaveImportedGpxListener; +import net.osmand.plus.shared.SharedUtil; import net.osmand.plus.track.GpxSelectionParams; -import net.osmand.shared.gpx.GpxDbHelper; import net.osmand.plus.track.helpers.GpxSelectionHelper; import net.osmand.plus.utils.OsmAndFormatter; import net.osmand.plus.views.OsmandMapTileView; +import net.osmand.shared.gpx.GpxDbHelper; import net.osmand.shared.gpx.GpxFile; import net.osmand.test.common.AndroidTest; import net.osmand.test.common.BaseIdlingResource; @@ -150,9 +151,10 @@ private void checkFPS() { } private void checkAnalysisUpdate() { - gpxDbHelper.getItem(file); // simulate multiple calls for getting GpxDataItem - if (GpxDbHelper.readTrackItemCount > 2) { - throw new AssertionError("To many updates of analysis " + GpxDbHelper.readTrackItemCount); + gpxDbHelper.getItem(SharedUtil.kFile(file)); // simulate multiple calls for getting GpxDataItem + long readItemCount = gpxDbHelper.getReadTrackItemCount(); + if (readItemCount > 2) { + throw new AssertionError("To many updates of analysis " + readItemCount); } } From e4ea6edbcafa283e451e0252d9fe4ed8246a46b9 Mon Sep 17 00:00:00 2001 From: alex-osm Date: Tue, 24 Sep 2024 14:29:46 +0300 Subject: [PATCH 36/37] Fix reading gpx color from db --- .../commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt index 709d47dd872..15d9b94fb2b 100644 --- a/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt +++ b/OsmAnd-shared/src/commonMain/kotlin/net/osmand/shared/gpx/GpxUtilities.kt @@ -178,6 +178,11 @@ object GpxUtilities { val gpxColor = GpxColor.getColorFromName(colorString) if (gpxColor != null) { return gpxColor.color + } else { + try { + return colorString.toInt() + } catch (_: NumberFormatException) { + } } } } From 90cb3e757c25b04bec9f9f325fe920e2d709b4d0 Mon Sep 17 00:00:00 2001 From: dmpr0 Date: Tue, 24 Sep 2024 14:30:40 +0300 Subject: [PATCH 37/37] Added icon for Vehicle Metrics plugin --- OsmAnd/res/drawable/ic_action_car_info.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 OsmAnd/res/drawable/ic_action_car_info.xml diff --git a/OsmAnd/res/drawable/ic_action_car_info.xml b/OsmAnd/res/drawable/ic_action_car_info.xml new file mode 100644 index 00000000000..dd96f68e3e3 --- /dev/null +++ b/OsmAnd/res/drawable/ic_action_car_info.xml @@ -0,0 +1,14 @@ + + + +