diff --git a/OsmAnd/res/layout/colors_card.xml b/OsmAnd/res/layout/colors_card.xml
index 5461aa1d9f..cade718b70 100644
--- a/OsmAnd/res/layout/colors_card.xml
+++ b/OsmAnd/res/layout/colors_card.xml
@@ -5,14 +5,20 @@
android:orientation="vertical">
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout/point_editor_button.xml b/OsmAnd/res/layout/point_editor_button.xml
index a5677280e9..5b1a130ac1 100644
--- a/OsmAnd/res/layout/point_editor_button.xml
+++ b/OsmAnd/res/layout/point_editor_button.xml
@@ -2,40 +2,30 @@
+ android:layout_height="wrap_content">
-
+
-
+
-
+
-
-
diff --git a/OsmAnd/res/layout/point_editor_fragment_new.xml b/OsmAnd/res/layout/point_editor_fragment_new.xml
index 3e8657cd22..7339cbd460 100644
--- a/OsmAnd/res/layout/point_editor_fragment_new.xml
+++ b/OsmAnd/res/layout/point_editor_fragment_new.xml
@@ -449,12 +449,15 @@
osmand:typeface="@string/font_roboto_medium" />
-
+ android:layout_marginBottom="@dimen/content_padding_half"
+ android:orientation="horizontal"
+ android:layout_marginStart="@dimen/content_padding_small" />
MIN_WALK_TIME) {
- routesBadges.addView(createWalkRouteBadge(walkingSegment, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
- routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createWalkRouteBadge(walkingSegment, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
+ routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
}
} else if (s.walkDist > 0) {
double walkTime = getWalkTime(s.walkDist, routeResult.getWalkSpeed());
@@ -307,20 +307,20 @@ public class PublicTransportCard extends BaseCard {
} else {
start = this.startLocation;
}
- routesBadges.addView(createWalkRouteBadge(walkTime, start, end, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
- routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createWalkRouteBadge(walkTime, start, end, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
+ routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
}
}
- routesBadges.addView(createRouteBadge(s, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createRouteBadge(s, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
if (iterator.hasNext()) {
- routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
} else {
walkingSegment = transportRoutingHelper.getWalkingRouteSegment(s, null);
if (walkingSegment != null) {
double walkTime = walkingSegment.getRoutingTime();
if (walkTime > MIN_WALK_TIME) {
- routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
- routesBadges.addView(createWalkRouteBadge(walkingSegment, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
+ routesBadges.addView(createWalkRouteBadge(walkingSegment, badgesRowClickable), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
}
} else {
double finishWalkDist = routeResult.getFinishWalkDist();
@@ -329,7 +329,7 @@ public class PublicTransportCard extends BaseCard {
if (walkTime > MIN_WALK_TIME) {
LatLon start = s.getEnd().getLocation();
LatLon end = this.endLocation;
- routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing, false));
+ routesBadges.addView(createArrow(), new FlowLayout.LayoutParams(itemsSpacing, itemsSpacing));
routesBadges.addView(createWalkRouteBadge(walkTime, start, end, badgesRowClickable));
}
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
index 9b5a101e16..6bf120f61d 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/ProfileAppearanceFragment.java
@@ -413,7 +413,8 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
colorItems.removeAllViews();
for (ProfileIconColors color : ProfileIconColors.values()) {
View colorItem = createColorItemView(color, colorItems);
- colorItems.addView(colorItem, new FlowLayout.LayoutParams(0, 0, true));
+ colorItems.addView(colorItem, new FlowLayout.LayoutParams(0, 0));
+ colorItems.setHorizontalAutoSpacing(true);
}
updateColorSelector(changedProfile.color);
} else if (ICON_ITEMS.equals(preference.getKey())) {
@@ -422,7 +423,8 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
ArrayList icons = ProfileIcons.getIcons();
for (int iconRes : icons) {
View iconItem = createIconItemView(iconRes, iconItems);
- iconItems.addView(iconItem, new FlowLayout.LayoutParams(0, 0,true));
+ iconItems.addView(iconItem, new FlowLayout.LayoutParams(0, 0));
+ iconItems.setHorizontalAutoSpacing(true);
}
setIconColor(changedProfile.iconRes);
} else if (LOCATION_ICON_ITEMS.equals(preference.getKey())) {
@@ -430,7 +432,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
locationIconItems.removeAllViews();
for (LocationIcon locationIcon : LocationIcon.values()) {
View iconItemView = createLocationIconView(locationIcon, locationIconItems);
- locationIconItems.addView(iconItemView, new FlowLayout.LayoutParams(0, 0, false));
+ locationIconItems.addView(iconItemView, new FlowLayout.LayoutParams(0, 0));
}
updateLocationIconSelector(changedProfile.locationIcon);
} else if (NAV_ICON_ITEMS.equals(preference.getKey())) {
@@ -438,7 +440,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
navIconItems.removeAllViews();
for (NavigationIcon navigationIcon : NavigationIcon.values()) {
View iconItemView = createNavigationIconView(navigationIcon, navIconItems);
- navIconItems.addView(iconItemView, new FlowLayout.LayoutParams(0, 0, false));
+ navIconItems.addView(iconItemView, new FlowLayout.LayoutParams(0, 0));
}
updateNavigationIconSelector(changedProfile.navigationIcon);
}
diff --git a/OsmAnd/src/net/osmand/plus/track/ColorsCard.java b/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
index bbea36737c..8b74e0319b 100644
--- a/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
+++ b/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
@@ -3,9 +3,7 @@ package net.osmand.plus.track;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
-import android.view.ViewGroup;
import android.widget.ImageView;
-import android.widget.LinearLayout;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
@@ -22,6 +20,7 @@ import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.track.CustomColorBottomSheet.ColorPickerListener;
import net.osmand.plus.widgets.FlowLayout;
+import net.osmand.plus.widgets.FlowLayout.LayoutParams;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
@@ -87,35 +86,41 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
@Override
protected void updateContent() {
createColorSelector();
- updateColorSelector(selectedColor, view);
+ updateColorSelector(selectedColor);
}
private void createColorSelector() {
- FlowLayout selectColor = view.findViewById(R.id.select_color);
- selectColor.removeAllViews();
+ FlowLayout selectCustomColor = view.findViewById(R.id.select_custom_color);
+ selectCustomColor.removeAllViews();
+ selectCustomColor.setHorizontalAutoSpacing(true);
+ int minimalPaddingBetweenIcon = app.getResources().getDimensionPixelSize(R.dimen.favorites_select_icon_button_right_padding);
for (int color : customColors) {
- selectColor.addView(createColorItemView(color, selectColor, true), new FlowLayout.LayoutParams(0, 0, true));
+ selectCustomColor.addView(createColorItemView(color, selectCustomColor, true), new LayoutParams(minimalPaddingBetweenIcon, 0));
}
if (customColors.size() < 6) {
- selectColor.addView(createAddCustomColorItemView(selectColor), new FlowLayout.LayoutParams(0, 0, true));
+ selectCustomColor.addView(createAddCustomColorItemView(selectCustomColor), new LayoutParams(minimalPaddingBetweenIcon, 0));
}
- selectColor.addView(createDividerView(selectColor), new FlowLayout.LayoutParams(0, 0, false));
+
+ FlowLayout selectDefaultColor = view.findViewById(R.id.select_default_color);
+ selectDefaultColor.removeAllViews();
+ selectDefaultColor.setHorizontalAutoSpacing(true);
for (int color : colors) {
- selectColor.addView(createColorItemView(color, selectColor, false), new FlowLayout.LayoutParams(0, 0, true));
+ selectDefaultColor.addView(createColorItemView(color, selectDefaultColor, false), new LayoutParams(minimalPaddingBetweenIcon, 0));
}
- updateColorSelector(selectedColor, selectColor);
+ updateColorSelector(selectedColor);
}
- private void updateColorSelector(int color, View rootView) {
- View oldColor = rootView.findViewWithTag(selectedColor);
+ private void updateColorSelector(int color) {
+ View oldColor = view.findViewWithTag(selectedColor);
if (oldColor != null) {
oldColor.findViewById(R.id.outline).setVisibility(View.INVISIBLE);
ImageView icon = oldColor.findViewById(R.id.icon);
- icon.setImageDrawable(UiUtilities.tintDrawable(icon.getDrawable(), R.color.icon_color_default_light));
+ icon.setImageDrawable(UiUtilities.tintDrawable(icon.getDrawable(),
+ getResolvedColor(nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light)));
}
- View newColor = rootView.findViewWithTag(color);
+ View newColor = view.findViewWithTag(color);
if (newColor != null) {
newColor.findViewById(R.id.outline).setVisibility(View.VISIBLE);
}
@@ -137,7 +142,7 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
backgroundCircle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- updateColorSelector(color, rootView);
+ updateColorSelector(color);
selectedColor = color;
CardListener listener = getListener();
@@ -187,17 +192,7 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return colorItemView;
}
- private View createDividerView(FlowLayout rootView) {
- LayoutInflater themedInflater = UiUtilities.getInflater(view.getContext(), nightMode);
- View divider = themedInflater.inflate(R.layout.simple_divider_item, rootView, false);
-
- LinearLayout dividerContainer = new LinearLayout(view.getContext());
- dividerContainer.addView(divider);
- dividerContainer.setPadding(0, AndroidUtils.dpToPx(app, 1), 0, AndroidUtils.dpToPx(app, 5));
- return dividerContainer;
- }
-
- private View createCircleView(ViewGroup rootView) {
+ private View createCircleView(FlowLayout rootView) {
LayoutInflater themedInflater = UiUtilities.getInflater(view.getContext(), nightMode);
View circleView = themedInflater.inflate(R.layout.point_editor_button, rootView, false);
ImageView outline = circleView.findViewById(R.id.outline);
diff --git a/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java b/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
index f34fcd9306..4b50139870 100644
--- a/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
+++ b/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
@@ -10,23 +10,21 @@ import net.osmand.AndroidUtils;
public class FlowLayout extends ViewGroup {
private int line_height;
+ private boolean horizontalAutoSpacing;
public static class LayoutParams extends ViewGroup.LayoutParams {
- final int horizontal_spacing;
- final int vertical_spacing;
- final boolean isHorizontalAutoSpacing;
+ final int horizontalSpacing;
+ final int verticalSpacing;
/**
- * @param horizontal_spacing Pixels between items, horizontally
- * @param vertical_spacing Pixels between items, vertically
- * @param isHorizontalAutoSpacing Pixels between items to fit screen width. When is enabled horizontal_spacing does not take into account.
+ * @param horizontalSpacing Pixels between items, horizontally
+ * @param verticalSpacing Pixels between items, vertically
*/
- public LayoutParams(int horizontal_spacing, int vertical_spacing, boolean isHorizontalAutoSpacing) {
+ public LayoutParams(int horizontalSpacing, int verticalSpacing) {
super(0, 0);
- this.horizontal_spacing = horizontal_spacing;
- this.vertical_spacing = vertical_spacing;
- this.isHorizontalAutoSpacing = isHorizontalAutoSpacing;
+ this.horizontalSpacing = horizontalSpacing;
+ this.verticalSpacing = verticalSpacing;
}
}
@@ -38,6 +36,11 @@ public class FlowLayout extends ViewGroup {
super(context, attrs);
}
+ // If true available horizontal space is added to items horizontalSpacing.
+ public void setHorizontalAutoSpacing(boolean horizontalAutoSpacing) {
+ this.horizontalAutoSpacing = horizontalAutoSpacing;
+ }
+
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if ((MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.UNSPECIFIED))
@@ -63,12 +66,12 @@ public class FlowLayout extends ViewGroup {
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST), childHeightMeasureSpec);
final int childWidth = child.getMeasuredWidth();
- line_height = Math.max(line_height, child.getMeasuredHeight() + lp.vertical_spacing);
+ line_height = Math.max(line_height, child.getMeasuredHeight() + lp.verticalSpacing);
if (horizontalPosition + childWidth > width) {
horizontalPosition = getPaddingLeft();
verticalPosition += line_height;
}
- horizontalPosition += childWidth + lp.horizontal_spacing;
+ horizontalPosition += childWidth + lp.horizontalSpacing;
}
}
@@ -85,7 +88,7 @@ public class FlowLayout extends ViewGroup {
@Override
protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
- return new LayoutParams(1, 1, false); // default of 1px spacing
+ return new LayoutParams(1, 1); // default of 1px spacing
}
@Override
@@ -113,21 +116,21 @@ public class FlowLayout extends ViewGroup {
} else {
freeSizeSpacing = width % childWidth / itemsCount;
}
- if (lp.isHorizontalAutoSpacing) {
+ if (horizontalAutoSpacing) {
if (isLayoutRtl) {
if (horizontalPosition - childWidth < getPaddingLeft()) {
horizontalPosition = width - getPaddingRight();
verticalPosition += line_height;
}
child.layout(horizontalPosition - childWidth, verticalPosition, horizontalPosition, verticalPosition + childHeight);
- horizontalPosition -= childWidth + lp.horizontal_spacing + freeSizeSpacing;
+ horizontalPosition -= childWidth + lp.horizontalSpacing + freeSizeSpacing;
} else {
if (horizontalPosition + childWidth > width) {
horizontalPosition = getPaddingLeft();
verticalPosition += line_height;
}
child.layout(horizontalPosition, verticalPosition, horizontalPosition + childWidth, verticalPosition + childHeight);
- horizontalPosition += childWidth + lp.horizontal_spacing + freeSizeSpacing;
+ horizontalPosition += childWidth + lp.horizontalSpacing + freeSizeSpacing;
}
} else {
if (isLayoutRtl) {
@@ -136,14 +139,14 @@ public class FlowLayout extends ViewGroup {
verticalPosition += line_height;
}
child.layout(horizontalPosition - childWidth, verticalPosition, horizontalPosition, verticalPosition + childHeight);
- horizontalPosition -= childWidth + lp.horizontal_spacing;
+ horizontalPosition -= childWidth + lp.horizontalSpacing;
} else {
if (horizontalPosition + childWidth > width) {
horizontalPosition = getPaddingLeft();
verticalPosition += line_height;
}
child.layout(horizontalPosition, verticalPosition, horizontalPosition + childWidth, verticalPosition + childHeight);
- horizontalPosition += childWidth + lp.horizontal_spacing;
+ horizontalPosition += childWidth + lp.horizontalSpacing;
}
}
}