diff --git a/OsmAnd/res/drawable/bg_point_circle_contour.xml b/OsmAnd/res/drawable/bg_point_circle_contour.xml
new file mode 100644
index 0000000000..46d0f51ec8
--- /dev/null
+++ b/OsmAnd/res/drawable/bg_point_circle_contour.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/OsmAnd/res/drawable/bg_point_rhomb_contour.xml b/OsmAnd/res/drawable/bg_point_rhomb_contour.xml
new file mode 100644
index 0000000000..8e1affcaf8
--- /dev/null
+++ b/OsmAnd/res/drawable/bg_point_rhomb_contour.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/OsmAnd/res/drawable/bg_point_square_contour.xml b/OsmAnd/res/drawable/bg_point_square_contour.xml
new file mode 100644
index 0000000000..1f492681f1
--- /dev/null
+++ b/OsmAnd/res/drawable/bg_point_square_contour.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/OsmAnd/src/net/osmand/data/FavouritePoint.java b/OsmAnd/src/net/osmand/data/FavouritePoint.java
index e23d8868c0..66f1635776 100644
--- a/OsmAnd/src/net/osmand/data/FavouritePoint.java
+++ b/OsmAnd/src/net/osmand/data/FavouritePoint.java
@@ -206,7 +206,7 @@ public class FavouritePoint implements Serializable, LocationPoint {
return backgroundType;
}
- private void setBackgroundType(BackgroundType backgroundType) {
+ public void setBackgroundType(BackgroundType backgroundType) {
this.backgroundType = backgroundType;
}
diff --git a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java
index 5e050a601f..a61083d7d2 100644
--- a/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java
+++ b/OsmAnd/src/net/osmand/plus/FavouritesDbHelper.java
@@ -302,7 +302,9 @@ public class FavouritesDbHelper {
if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) {
p.setColor(ContextCompat.getColor(context, R.color.map_widget_blue));
} else {
- p.setColor(group.color);
+ if (p.getColor() == 0) {
+ p.setColor(group.color);
+ }
}
group.points.add(p);
cachedFavoritePoints.add(p);
@@ -440,7 +442,9 @@ public class FavouritesDbHelper {
if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) {
p.setColor(ContextCompat.getColor(context, R.color.map_widget_blue));
} else {
- p.setColor(pg.color);
+ if (p.getColor() == 0) {
+ p.setColor(pg.color);
+ }
}
pg.points.add(p);
}
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java
index 630495d51a..20babe18cd 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/FavoritePointEditorFragmentNew.java
@@ -10,6 +10,8 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
@@ -38,8 +40,10 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
private FavouritePoint favorite;
@Nullable
private FavoriteGroup group;
-
private int color;
+ private int iconId;
+ @NonNull
+ private FavouritePoint.BackgroundType backgroundType = FavouritePoint.BackgroundType.CIRCLE;
@Nullable
FavouritesDbHelper helper;
@@ -71,6 +75,8 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
this.favorite = favorite;
this.group = helper.getGroup(favorite);
this.color = favorite.getColor();
+ this.backgroundType = favorite.getBackgroundType();
+ this.iconId = favorite.getIconId();
}
}
@@ -176,7 +182,16 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
@Override
public void setColor(int color) {
this.color = color;
+ }
+ @Override
+ public void setBackgroundType(@NonNull FavouritePoint.BackgroundType backgroundType) {
+ this.backgroundType = backgroundType;
+ }
+
+ @Override
+ public void setIcon(int iconId) {
+ this.iconId = iconId;
}
@Override
@@ -226,11 +241,12 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
final FavouritePoint point = new FavouritePoint(favorite.getLatitude(), favorite.getLongitude(),
getNameTextValue(), getCategoryTextValue());
point.setDescription(getDescriptionTextValue());
+ point.setColor(color);
+ point.setBackgroundType(backgroundType);
+ point.setIconId(iconId);
AlertDialog.Builder builder = FavouritesDbHelper.checkDuplicates(point, helper, getMapActivity());
- if (favorite.getName().equals(point.getName()) &&
- favorite.getCategory().equals(point.getCategory()) &&
- Algorithms.stringsEqual(favorite.getDescription(), point.getDescription())) {
+ if (isChanged(favorite, point)) {
if (needDismiss) {
dismiss(false);
@@ -242,24 +258,39 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
builder.setPositiveButton(R.string.shared_string_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- doSave(favorite, point.getName(), point.getCategory(), point.getDescription(), needDismiss);
+ doSave(favorite, point.getName(), point.getCategory(), point.getDescription(),
+ point.getColor(), point.getBackgroundType(), point.getIconId(), needDismiss);
}
});
builder.create().show();
} else {
- doSave(favorite, point.getName(), point.getCategory(), point.getDescription(), needDismiss);
+ doSave(favorite, point.getName(), point.getCategory(), point.getDescription(),
+ point.getColor(), point.getBackgroundType(), point.getIconId(), needDismiss);
}
saved = true;
}
}
- private void doSave(FavouritePoint favorite, String name, String category, String description, boolean needDismiss) {
+ private boolean isChanged(FavouritePoint favorite, FavouritePoint point) {
+ return favorite.getColor() == point.getColor() &&
+ favorite.getIconId() == point.getIconId() &&
+ favorite.getName().equals(point.getName()) &&
+ favorite.getCategory().equals(point.getCategory()) &&
+ favorite.getBackgroundType().equals(point.getBackgroundType()) &&
+ Algorithms.stringsEqual(favorite.getDescription(), point.getDescription());
+ }
+
+ private void doSave(FavouritePoint favorite, String name, String category, String description,
+ @ColorInt int color, FavouritePoint.BackgroundType backgroundType, @DrawableRes int iconId, boolean needDismiss) {
FavouritesDbHelper helper = getHelper();
FavoritePointEditor editor = getFavoritePointEditor();
if (editor != null && helper != null) {
if (editor.isNew()) {
- doAddFavorite(name, category, description);
+ doAddFavorite(name, category, description, color, backgroundType, iconId);
} else {
+ favorite.setColor(color);
+ favorite.setBackgroundType(backgroundType);
+ favorite.setIconId(iconId);
helper.editFavouriteName(favorite, name, category, description);
}
}
@@ -279,7 +310,8 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
}
}
- private void doAddFavorite(String name, String category, String description) {
+ private void doAddFavorite(String name, String category, String description, @ColorInt int color,
+ FavouritePoint.BackgroundType backgroundType, @DrawableRes int iconId) {
OsmandApplication app = getMyApplication();
FavouritesDbHelper helper = getHelper();
FavouritePoint favorite = getFavorite();
@@ -287,6 +319,9 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
favorite.setName(name);
favorite.setCategory(category);
favorite.setDescription(description);
+ favorite.setColor(color);
+ favorite.setBackgroundType(backgroundType);
+ favorite.setIconId(iconId);
app.getSettings().LAST_FAV_CATEGORY_ENTERED.set(category);
helper.addFavourite(favorite);
}
@@ -374,6 +409,12 @@ public class FavoritePointEditorFragmentNew extends PointEditorFragmentNew {
return color;
}
+ @Override
+ @NonNull
+ public FavouritePoint.BackgroundType getBackgroundType() {
+ return backgroundType;
+ }
+
private int getColor() {
return color;
}
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
index 04cc362f7b..265562b305 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
@@ -68,7 +68,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
private Button addDelDescription;
private boolean cancelled;
private boolean nightMode;
- private String selectedIcon;
+ private int selectedIcon;
@ColorInt
private int selectedColor;
private FavouritePoint.BackgroundType selectedShape = FavouritePoint.BackgroundType.CIRCLE;
@@ -91,6 +91,8 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
editor.updateNightMode();
selectedColor = 0xb4FFFFFF & getPointColor();
+ selectedShape = getBackgroundType();
+ selectedIcon = R.drawable.mx_special_star;
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
toolbar.setTitle(getToolbarTitle());
@@ -115,10 +117,6 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
replaceIcon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_replace, activeColorResId));
ImageView deleteIcon = (ImageView) view.findViewById(R.id.delete_action_icon);
deleteIcon.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.ic_action_delete_dark, activeColorResId));
-
-// ((TextView)view.findViewById(R.id.replace_action_title)).setTextColor(ContextCompat.getColor(app,activeColorResId));
-// ((TextView)view.findViewById(R.id.replace_action_description)).setTextColor(ContextCompat.getColor(app,activeColorResId));
-// ((TextView)view.findViewById(R.id.delete_action_title)).setTextColor(ContextCompat.getColor(app,activeColorResId));
View groupList = view.findViewById(R.id.group_list_button);
groupList.setOnClickListener(new View.OnClickListener() {
@Override
@@ -239,16 +237,6 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
private void createGroupSelector(OsmandApplication app) {
GroupAdapter groupListAdapter = new GroupAdapter(app);
- groupListAdapter.setItemClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-// int position = groupListAdapter.getChildAdapterPosition(v);
-// if (position == RecyclerView.NO_POSITION) {
-// return;
-// }
-// selectFavorite(favouritePoints.get(position));
- }
- });
groupListAdapter.setSelectedItemName(getCategoryInitValue());
RecyclerView groupRecyclerView = view.findViewById(R.id.group_recycler_view);
groupRecyclerView.setAdapter(groupListAdapter);
@@ -256,6 +244,9 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
groupListAdapter.notifyDataSetChanged();
}
+ private void selectIconGroup() {
+ }
+
private void createColorSelector() {
FlowLayout selectColor = view.findViewById(R.id.select_color);
for (int color : ColorDialogs.pallette) {
@@ -289,19 +280,13 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
icon.setImageDrawable(UiUtilities.tintDrawable(icon.getDrawable(), R.color.icon_color_default_light));
}
rootView.findViewWithTag(color).findViewById(R.id.outline).setVisibility(View.VISIBLE);
- View icon = rootView.findViewWithTag(selectedIcon);
- if (icon != null) {
- ImageView iconImage = icon.findViewById(R.id.icon);
- iconImage.setImageDrawable(UiUtilities.tintDrawable(iconImage.getDrawable(), R.color.white_50_transparent));
- ImageView backgroundCircle = view.findViewById(R.id.background);
- AndroidUtils.setBackground(backgroundCircle,
- UiUtilities.tintDrawable(ContextCompat.getDrawable(view.getContext(), selectedShape.getIconId()), color));
- }
+
((TextView) view.findViewById(R.id.color_name)).setText(ColorDialogs.getColorName(color));
selectedColor = color;
setColor(color);
updateNameIcon();
- updateShapeSelector();
+ updateShapeSelector(selectedShape, view);
+ updateIconSelector(selectedIcon, view);
}
private void createShapeSelector() {
@@ -339,10 +324,6 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
return app.getUIUtilities().getIcon(iconRes, R.color.divider_color_light);
}
- private void updateShapeSelector() {
- updateShapeSelector(selectedShape, view);
- }
-
private void updateShapeSelector(FavouritePoint.BackgroundType backgroundType, View rootView) {
View oldShape = rootView.findViewWithTag(selectedShape);
if (oldShape != null) {
@@ -360,6 +341,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
UiUtilities.tintDrawable(ContextCompat.getDrawable(requireMyApplication(), backgroundType.getIconId()),
selectedColor));
selectedShape = backgroundType;
+ setBackgroundType(backgroundType);
}
private void createIconSelector() {
@@ -375,7 +357,6 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
} catch (JSONException e) {
e.printStackTrace();
}
-
String selectedIconCategory = group.keySet().iterator().next();
FlowLayout selectIcon = view.findViewById(R.id.select_icon);
JSONArray iconJsonArray = group.get(selectedIconCategory);
@@ -388,14 +369,12 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
e.printStackTrace();
}
}
-
GroupNameAdapter groupNameListAdapter = new GroupNameAdapter();
groupNameListAdapter.setItems(new ArrayList<>(group.keySet()));
RecyclerView groupNameRecyclerView = view.findViewById(R.id.group_name_recycler_view);
groupNameRecyclerView.setAdapter(groupNameListAdapter);
groupNameRecyclerView.setLayoutManager(new LinearLayoutManager(requireMyApplication(), RecyclerView.HORIZONTAL, false));
groupNameListAdapter.notifyDataSetChanged();
-
for (String name : iconNameList) {
selectIcon.addView(createIconItemView(name, selectIcon), new FlowLayout.LayoutParams(0, 0));
}
@@ -420,24 +399,32 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
updateIconSelector(iconRes, rootView);
}
});
- iconItemView.setTag(String.valueOf(iconRes));
+ iconItemView.setTag(iconRes);
return iconItemView;
}
- private void updateIconSelector(int iconRes, ViewGroup rootView) {
-// setIconNewColor(iconRes);
+ private void updateIconSelector(int iconRes, View rootView) {
View oldIcon = rootView.findViewWithTag(selectedIcon);
if (oldIcon != null) {
oldIcon.findViewById(R.id.outline).setVisibility(View.INVISIBLE);
+ ImageView background = oldIcon.findViewById(R.id.background);
+ AndroidUtils.setBackground(background,
+ UiUtilities.tintDrawable(ContextCompat.getDrawable(requireMyApplication(), R.drawable.bg_point_circle),
+ ContextCompat.getColor(requireMyApplication(), R.color.divider_color_light)));
}
- rootView.findViewWithTag(String.valueOf(iconRes)).findViewById(R.id.outline).setVisibility(View.VISIBLE);
-// checkMark.setImageDrawable(app.getUIUtilities().getIcon(changedProfile.iconRes, R.color.icon_color_default_light));
-// AndroidUtils.setBackground(oldIcon.findViewById(R.id.backgroundCircle),
-// UiUtilities.tintDrawable(ContextCompat.getDrawable(app, R.drawable.circle_background_light),
-// UiUtilities.getColorWithAlpha(ContextCompat.getColor(app, R.color.icon_color_default_light), 0.1f)));
- selectedIcon = String.valueOf(iconRes);
+ View icon = rootView.findViewWithTag(iconRes);
+ if (icon != null) {
+ ImageView iconImage = icon.findViewById(R.id.icon);
+ icon.findViewById(R.id.outline).setVisibility(View.VISIBLE);
+ iconImage.setImageDrawable(UiUtilities.tintDrawable(iconImage.getDrawable(), R.color.white_50_transparent));
+ ImageView backgroundCircle = icon.findViewById(R.id.background);
+ AndroidUtils.setBackground(backgroundCircle,
+ UiUtilities.tintDrawable(ContextCompat.getDrawable(view.getContext(), R.drawable.bg_point_circle), selectedColor));
+ }
+ selectedIcon = iconRes;
updateNameIcon();
+ setIcon(iconRes);
}
private void updateNameIcon() {
@@ -586,6 +573,10 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
public abstract void setColor(int color);
+ public abstract void setBackgroundType(FavouritePoint.BackgroundType backgroundType);
+
+ public abstract void setIcon(int iconId);
+
protected String getDefaultCategoryName() {
return getString(R.string.shared_string_none);
}
@@ -636,6 +627,8 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
public abstract int getPointColor();
+ public abstract FavouritePoint.BackgroundType getBackgroundType();
+
public abstract Set getCategories();
String getNameTextValue() {
@@ -759,10 +752,6 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment {
return items == null ? 0 : items.size() + 1;
}
- void setItemClickListener(View.OnClickListener listener) {
- this.listener = listener;
- }
-
String getSelectedItem() {
return selectedItemName;
}