Fix background type.

This commit is contained in:
Dima-1 2020-03-17 14:49:20 +02:00
parent 0ff96f333b
commit 889ac143d3
7 changed files with 117 additions and 56 deletions

View file

@ -0,0 +1,7 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="@android:color/transparent" />
<stroke
android:width="2dp"
android:color="@color/divider_color_light" />
</shape>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="40dp"
android:height="40dp"
android:viewportWidth="40"
android:viewportHeight="40">
<path
android:pathData="M21.7071,0.7071L39.2929,18.2929C39.7456,18.7456 40,19.3597 40,20C40,20.6403 39.7456,21.2544 39.2929,21.7071L21.7071,39.2929C21.2544,39.7456 20.6403,40 20,40C19.3597,40 18.7456,39.7456 18.2929,39.2929L0.7071,21.7071C0.2544,21.2544 0,20.6403 0,20C0,19.3597 0.2544,18.7456 0.7071,18.2929L18.2929,0.7071C18.7456,0.2544 19.3597,0 20,0C20.6403,0 21.2544,0.2544 21.7071,0.7071Z"
android:strokeWidth="2"
android:strokeColor="#e6e6e6" />
</vector>

View file

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="40"
android:viewportHeight="40">
<path
android:pathData="M4,1L36,1A3,3 0,0 1,39 4L39,36A3,3 0,0 1,36 39L4,39A3,3 0,0 1,1 36L1,4A3,3 0,0 1,4 1z"
android:strokeWidth="2"
android:strokeColor="#e6e6e6"/>
</vector>

View file

@ -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;
}

View file

@ -302,8 +302,10 @@ public class FavouritesDbHelper {
if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) {
p.setColor(ContextCompat.getColor(context, R.color.map_widget_blue));
} else {
if (p.getColor() == 0) {
p.setColor(group.color);
}
}
group.points.add(p);
cachedFavoritePoints.add(p);
}
@ -440,8 +442,10 @@ public class FavouritesDbHelper {
if (FavouritePoint.SpecialPointType.PARKING.equals(p.getSpecialPointType())) {
p.setColor(ContextCompat.getColor(context, R.color.map_widget_blue));
} else {
if (p.getColor() == 0) {
p.setColor(pg.color);
}
}
pg.points.add(p);
}
sortAll();

View file

@ -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;
}

View file

@ -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<String> 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;
}