mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 13:03:36 +00:00
[android] Load predefined colors from core
Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
committed by
Konstantin Pastbin
parent
45e15e2edb
commit
f1f5ccd778
@@ -35,6 +35,7 @@ import app.organicmaps.sdk.bookmarks.data.BookmarkSharingResult;
|
|||||||
import app.organicmaps.sdk.bookmarks.data.CategoryDataSource;
|
import app.organicmaps.sdk.bookmarks.data.CategoryDataSource;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
import app.organicmaps.sdk.bookmarks.data.Icon;
|
||||||
import app.organicmaps.sdk.bookmarks.data.KmlFileType;
|
import app.organicmaps.sdk.bookmarks.data.KmlFileType;
|
||||||
|
import app.organicmaps.sdk.bookmarks.data.PredefinedColors;
|
||||||
import app.organicmaps.sdk.bookmarks.data.SortedBlock;
|
import app.organicmaps.sdk.bookmarks.data.SortedBlock;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||||
import app.organicmaps.sdk.search.BookmarkSearchListener;
|
import app.organicmaps.sdk.search.BookmarkSearchListener;
|
||||||
@@ -592,7 +593,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
|
|||||||
if (mTrack == null)
|
if (mTrack == null)
|
||||||
return;
|
return;
|
||||||
final Bundle args = new Bundle();
|
final Bundle args = new Bundle();
|
||||||
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, Icon.getColorPosition(mTrack.getColor()));
|
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, PredefinedColors.getPredefinedColorIndex(mTrack.getColor()));
|
||||||
final FragmentManager manager = getChildFragmentManager();
|
final FragmentManager manager = getChildFragmentManager();
|
||||||
String className = BookmarkColorDialogFragment.class.getName();
|
String className = BookmarkColorDialogFragment.class.getName();
|
||||||
final FragmentFactory factory = manager.getFragmentFactory();
|
final FragmentFactory factory = manager.getFragmentFactory();
|
||||||
@@ -601,7 +602,7 @@ public class BookmarksListFragment extends BaseMwmRecyclerFragment<ConcatAdapter
|
|||||||
dialogFragment.setArguments(args);
|
dialogFragment.setArguments(args);
|
||||||
dialogFragment.setOnColorSetListener((colorPos) -> {
|
dialogFragment.setOnColorSetListener((colorPos) -> {
|
||||||
int from = mTrack.getColor();
|
int from = mTrack.getColor();
|
||||||
int to = BookmarkManager.ICONS.get(colorPos).argb();
|
int to = PredefinedColors.getColor(colorPos);
|
||||||
if (from == to)
|
if (from == to)
|
||||||
return;
|
return;
|
||||||
BookmarkManager.INSTANCE.changeTrackColor(mTrack.getTrackId(), to);
|
BookmarkManager.INSTANCE.changeTrackColor(mTrack.getTrackId(), to);
|
||||||
|
|||||||
@@ -7,16 +7,18 @@ import android.view.View;
|
|||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
import app.organicmaps.sdk.bookmarks.data.PredefinedColors;
|
||||||
import app.organicmaps.util.Graphics;
|
import app.organicmaps.util.Graphics;
|
||||||
import com.google.android.material.imageview.ShapeableImageView;
|
import com.google.android.material.imageview.ShapeableImageView;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class IconsAdapter extends ArrayAdapter<Icon>
|
public class ColorsAdapter extends ArrayAdapter<Integer>
|
||||||
{
|
{
|
||||||
|
@PredefinedColors.Color
|
||||||
private int mCheckedIconColor;
|
private int mCheckedIconColor;
|
||||||
|
|
||||||
public IconsAdapter(Context context, List<Icon> list)
|
public ColorsAdapter(Context context, List<Integer> list)
|
||||||
{
|
{
|
||||||
super(context, 0, 0, list);
|
super(context, 0, 0, list);
|
||||||
}
|
}
|
||||||
@@ -35,19 +37,20 @@ public class IconsAdapter extends ArrayAdapter<Icon>
|
|||||||
else
|
else
|
||||||
holder = (SpinnerViewHolder) convertView.getTag();
|
holder = (SpinnerViewHolder) convertView.getTag();
|
||||||
|
|
||||||
final Icon icon = getItem(position);
|
@PredefinedColors.Color
|
||||||
|
final int color = Objects.requireNonNull(getItem(position));
|
||||||
|
|
||||||
Drawable circle;
|
Drawable circle;
|
||||||
if (icon.getColor() == mCheckedIconColor)
|
if (color == mCheckedIconColor)
|
||||||
{
|
{
|
||||||
circle = Graphics.drawCircleAndImage(getItem(position).argb(), R.dimen.track_circle_size,
|
circle = Graphics.drawCircleAndImage(PredefinedColors.getColor(mCheckedIconColor), R.dimen.track_circle_size,
|
||||||
app.organicmaps.sdk.R.drawable.ic_bookmark_none, R.dimen.bookmark_icon_size,
|
app.organicmaps.sdk.R.drawable.ic_bookmark_none, R.dimen.bookmark_icon_size,
|
||||||
getContext());
|
getContext());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
circle =
|
circle = Graphics.drawCircle(PredefinedColors.getColor(color), R.dimen.select_color_circle_size,
|
||||||
Graphics.drawCircle(getItem(position).argb(), R.dimen.select_color_circle_size, getContext().getResources());
|
getContext().getResources());
|
||||||
}
|
}
|
||||||
holder.icon.setImageDrawable(circle);
|
holder.icon.setImageDrawable(circle);
|
||||||
return convertView;
|
return convertView;
|
||||||
@@ -41,8 +41,6 @@ public enum BookmarkManager {
|
|||||||
// These values have to match the values of kml::CompilationType from kml/types.hpp
|
// These values have to match the values of kml::CompilationType from kml/types.hpp
|
||||||
public static final int CATEGORY = 0;
|
public static final int CATEGORY = 0;
|
||||||
|
|
||||||
public static final List<Icon> ICONS = new ArrayList<>();
|
|
||||||
|
|
||||||
private static final String[] BOOKMARKS_EXTENSIONS = Framework.nativeGetBookmarksFilesExts();
|
private static final String[] BOOKMARKS_EXTENSIONS = Framework.nativeGetBookmarksFilesExts();
|
||||||
|
|
||||||
private static final String TAG = BookmarkManager.class.getSimpleName();
|
private static final String TAG = BookmarkManager.class.getSimpleName();
|
||||||
@@ -70,26 +68,6 @@ public enum BookmarkManager {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private OnElevationActivePointChangedListener mOnElevationActivePointChangedListener;
|
private OnElevationActivePointChangedListener mOnElevationActivePointChangedListener;
|
||||||
|
|
||||||
static
|
|
||||||
{
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_RED, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_PINK, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_PURPLE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_DEEPPURPLE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_BLUE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_LIGHTBLUE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_CYAN, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_TEAL, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_GREEN, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_LIME, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_YELLOW, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_ORANGE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_DEEPORANGE, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_BROWN, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_GRAY, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
ICONS.add(new Icon(Icon.PREDEFINED_COLOR_BLUEGRAY, Icon.BOOKMARK_ICON_TYPE_NONE));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void toggleCategoryVisibility(@NonNull BookmarkCategory category)
|
public void toggleCategoryVisibility(@NonNull BookmarkCategory category)
|
||||||
{
|
{
|
||||||
boolean isVisible = isVisible(category.getId());
|
boolean isVisible = isVisible(category.getId());
|
||||||
@@ -342,7 +320,7 @@ public enum BookmarkManager {
|
|||||||
nativeShowBookmarkCategoryOnMap(catId);
|
nativeShowBookmarkCategoryOnMap(catId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Icon.PredefinedColor
|
@PredefinedColors.Color
|
||||||
public int getLastEditedColor()
|
public int getLastEditedColor()
|
||||||
{
|
{
|
||||||
return nativeGetLastEditedColor();
|
return nativeGetLastEditedColor();
|
||||||
@@ -618,7 +596,7 @@ public enum BookmarkManager {
|
|||||||
return nativeGetBookmarkXY(bookmarkId);
|
return nativeGetBookmarkXY(bookmarkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Icon.PredefinedColor
|
@PredefinedColors.Color
|
||||||
public int getBookmarkColor(@IntRange(from = 0) long bookmarkId)
|
public int getBookmarkColor(@IntRange(from = 0) long bookmarkId)
|
||||||
{
|
{
|
||||||
return nativeGetBookmarkColor(bookmarkId);
|
return nativeGetBookmarkColor(bookmarkId);
|
||||||
@@ -652,7 +630,7 @@ public enum BookmarkManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setBookmarkParams(@IntRange(from = 0) long bookmarkId, @NonNull String name,
|
public void setBookmarkParams(@IntRange(from = 0) long bookmarkId, @NonNull String name,
|
||||||
@Icon.PredefinedColor int color, @NonNull String descr)
|
@PredefinedColors.Color int color, @NonNull String descr)
|
||||||
{
|
{
|
||||||
nativeSetBookmarkParams(bookmarkId, name, color, descr);
|
nativeSetBookmarkParams(bookmarkId, name, color, descr);
|
||||||
}
|
}
|
||||||
@@ -808,7 +786,7 @@ public enum BookmarkManager {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private native Bookmark nativeAddBookmarkToLastEditedCategory(double lat, double lon);
|
private native Bookmark nativeAddBookmarkToLastEditedCategory(double lat, double lon);
|
||||||
|
|
||||||
@Icon.PredefinedColor
|
@PredefinedColors.Color
|
||||||
private native int nativeGetLastEditedColor();
|
private native int nativeGetLastEditedColor();
|
||||||
|
|
||||||
private static native void nativeLoadBookmarksFile(@NonNull String path, boolean isTemporaryFile);
|
private static native void nativeLoadBookmarksFile(@NonNull String path, boolean isTemporaryFile);
|
||||||
@@ -874,7 +852,7 @@ public enum BookmarkManager {
|
|||||||
@NonNull
|
@NonNull
|
||||||
private static native ParcelablePointD nativeGetBookmarkXY(@IntRange(from = 0) long bookmarkId);
|
private static native ParcelablePointD nativeGetBookmarkXY(@IntRange(from = 0) long bookmarkId);
|
||||||
|
|
||||||
@Icon.PredefinedColor
|
@PredefinedColors.Color
|
||||||
private static native int nativeGetBookmarkColor(@IntRange(from = 0) long bookmarkId);
|
private static native int nativeGetBookmarkColor(@IntRange(from = 0) long bookmarkId);
|
||||||
|
|
||||||
private static native int nativeGetBookmarkIcon(@IntRange(from = 0) long bookmarkId);
|
private static native int nativeGetBookmarkIcon(@IntRange(from = 0) long bookmarkId);
|
||||||
@@ -889,12 +867,13 @@ public enum BookmarkManager {
|
|||||||
private static native String nativeEncode2Ge0Url(@IntRange(from = 0) long bookmarkId, boolean addName);
|
private static native String nativeEncode2Ge0Url(@IntRange(from = 0) long bookmarkId, boolean addName);
|
||||||
|
|
||||||
private static native void nativeSetBookmarkParams(@IntRange(from = 0) long bookmarkId, @NonNull String name,
|
private static native void nativeSetBookmarkParams(@IntRange(from = 0) long bookmarkId, @NonNull String name,
|
||||||
@Icon.PredefinedColor int color, @NonNull String descr);
|
@PredefinedColors.Color int color, @NonNull String descr);
|
||||||
|
|
||||||
private static native void nativeChangeTrackColor(@IntRange(from = 0) long trackId, @Icon.PredefinedColor int color);
|
private static native void nativeChangeTrackColor(@IntRange(from = 0) long trackId,
|
||||||
|
@PredefinedColors.Color int color);
|
||||||
|
|
||||||
private static native void nativeSetTrackParams(@IntRange(from = 0) long trackId, @NonNull String name,
|
private static native void nativeSetTrackParams(@IntRange(from = 0) long trackId, @NonNull String name,
|
||||||
@Icon.PredefinedColor int color, @NonNull String descr);
|
@PredefinedColors.Color int color, @NonNull String descr);
|
||||||
|
|
||||||
private static native void nativeChangeBookmarkCategory(@IntRange(from = 0) long oldCatId,
|
private static native void nativeChangeBookmarkCategory(@IntRange(from = 0) long oldCatId,
|
||||||
@IntRange(from = 0) long newCatId,
|
@IntRange(from = 0) long newCatId,
|
||||||
|
|||||||
@@ -2,71 +2,13 @@ package app.organicmaps.sdk.bookmarks.data;
|
|||||||
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
import androidx.annotation.IntDef;
|
|
||||||
import app.organicmaps.sdk.R;
|
import app.organicmaps.sdk.R;
|
||||||
import com.google.common.base.Objects;
|
import com.google.common.base.Objects;
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
|
|
||||||
public class Icon implements Parcelable
|
public class Icon implements Parcelable
|
||||||
{
|
{
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
@IntDef({PREDEFINED_COLOR_NONE, PREDEFINED_COLOR_RED, PREDEFINED_COLOR_BLUE, PREDEFINED_COLOR_PURPLE,
|
|
||||||
PREDEFINED_COLOR_YELLOW, PREDEFINED_COLOR_PINK, PREDEFINED_COLOR_BROWN, PREDEFINED_COLOR_GREEN,
|
|
||||||
PREDEFINED_COLOR_ORANGE, PREDEFINED_COLOR_DEEPPURPLE, PREDEFINED_COLOR_LIGHTBLUE, PREDEFINED_COLOR_CYAN,
|
|
||||||
PREDEFINED_COLOR_TEAL, PREDEFINED_COLOR_LIME, PREDEFINED_COLOR_DEEPORANGE, PREDEFINED_COLOR_GRAY,
|
|
||||||
PREDEFINED_COLOR_BLUEGRAY})
|
|
||||||
@interface PredefinedColor
|
|
||||||
{}
|
|
||||||
|
|
||||||
static final int PREDEFINED_COLOR_NONE = 0;
|
|
||||||
static final int PREDEFINED_COLOR_RED = 1;
|
|
||||||
static final int PREDEFINED_COLOR_BLUE = 2;
|
|
||||||
static final int PREDEFINED_COLOR_PURPLE = 3;
|
|
||||||
static final int PREDEFINED_COLOR_YELLOW = 4;
|
|
||||||
static final int PREDEFINED_COLOR_PINK = 5;
|
|
||||||
static final int PREDEFINED_COLOR_BROWN = 6;
|
|
||||||
static final int PREDEFINED_COLOR_GREEN = 7;
|
|
||||||
static final int PREDEFINED_COLOR_ORANGE = 8;
|
|
||||||
static final int PREDEFINED_COLOR_DEEPPURPLE = 9;
|
|
||||||
static final int PREDEFINED_COLOR_LIGHTBLUE = 10;
|
|
||||||
static final int PREDEFINED_COLOR_CYAN = 11;
|
|
||||||
static final int PREDEFINED_COLOR_TEAL = 12;
|
|
||||||
static final int PREDEFINED_COLOR_LIME = 13;
|
|
||||||
static final int PREDEFINED_COLOR_DEEPORANGE = 14;
|
|
||||||
static final int PREDEFINED_COLOR_GRAY = 15;
|
|
||||||
static final int PREDEFINED_COLOR_BLUEGRAY = 16;
|
|
||||||
|
|
||||||
private static int shift(int v, int bitCount)
|
|
||||||
{
|
|
||||||
return v << bitCount;
|
|
||||||
}
|
|
||||||
private static int toARGB(int r, int g, int b)
|
|
||||||
{
|
|
||||||
return shift(255, 24) + shift(r, 16) + shift(g, 8) + b;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// @note Important! Should be synced with kml/types.hpp/PredefinedColor
|
|
||||||
/// @todo Values can be taken from Core.
|
|
||||||
private static final int[] ARGB_COLORS = {toARGB(229, 27, 35), // none
|
|
||||||
toARGB(229, 27, 35), // red
|
|
||||||
toARGB(0, 110, 199), // blue
|
|
||||||
toARGB(156, 39, 176), // purple
|
|
||||||
toARGB(255, 200, 0), // yellow
|
|
||||||
toARGB(255, 65, 130), // pink
|
|
||||||
toARGB(121, 85, 72), // brown
|
|
||||||
toARGB(56, 142, 60), // green
|
|
||||||
toARGB(255, 160, 0), // orange
|
|
||||||
toARGB(102, 57, 191), // deeppurple
|
|
||||||
toARGB(36, 156, 242), // lightblue
|
|
||||||
toARGB(20, 190, 205), // cyan
|
|
||||||
toARGB(0, 165, 140), // teal
|
|
||||||
toARGB(147, 191, 57), // lime
|
|
||||||
toARGB(240, 100, 50), // deeporange
|
|
||||||
toARGB(115, 115, 115), // gray
|
|
||||||
toARGB(89, 115, 128)}; // bluegray
|
|
||||||
|
|
||||||
static final int BOOKMARK_ICON_TYPE_NONE = 0;
|
static final int BOOKMARK_ICON_TYPE_NONE = 0;
|
||||||
|
|
||||||
/// @note Important! Should be synced with kml/types.hpp/BookmarkIcon
|
/// @note Important! Should be synced with kml/types.hpp/BookmarkIcon
|
||||||
@@ -98,11 +40,16 @@ public class Icon implements Parcelable
|
|||||||
R.drawable.ic_bookmark_none // FastFood
|
R.drawable.ic_bookmark_none // FastFood
|
||||||
};
|
};
|
||||||
|
|
||||||
@PredefinedColor
|
@PredefinedColors.Color
|
||||||
private final int mColor;
|
private final int mColor;
|
||||||
private final int mType;
|
private final int mType;
|
||||||
|
|
||||||
public Icon(@PredefinedColor int color, int type)
|
public Icon(@PredefinedColors.Color int color)
|
||||||
|
{
|
||||||
|
this(color, BOOKMARK_ICON_TYPE_NONE);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Icon(@PredefinedColors.Color int color, int type)
|
||||||
{
|
{
|
||||||
mColor = color;
|
mColor = color;
|
||||||
mType = type;
|
mType = type;
|
||||||
@@ -127,25 +74,16 @@ public class Icon implements Parcelable
|
|||||||
mType = in.readInt();
|
mType = in.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@PredefinedColor
|
@PredefinedColors.Color
|
||||||
public int getColor()
|
public int getColor()
|
||||||
{
|
{
|
||||||
return mColor;
|
return mColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ColorInt
|
||||||
public int argb()
|
public int argb()
|
||||||
{
|
{
|
||||||
return ARGB_COLORS[mColor];
|
return PredefinedColors.getColor(mColor);
|
||||||
}
|
|
||||||
|
|
||||||
public static int getColorPosition(int color)
|
|
||||||
{
|
|
||||||
for (int index = 1; index < ARGB_COLORS.length; index++)
|
|
||||||
{
|
|
||||||
if (ARGB_COLORS[index] == color)
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@DrawableRes
|
@DrawableRes
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
package app.organicmaps.sdk.bookmarks.data;
|
||||||
|
|
||||||
|
import androidx.annotation.ColorInt;
|
||||||
|
import androidx.annotation.IntRange;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import dalvik.annotation.optimization.FastNative;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
|
public class PredefinedColors
|
||||||
|
{
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
@IntRange(from = 0)
|
||||||
|
public @interface Color
|
||||||
|
{}
|
||||||
|
|
||||||
|
/// @note Color format: ARGB
|
||||||
|
@ColorInt
|
||||||
|
private static final int[] PREDEFINED_COLORS = nativeGetPredefinedColors();
|
||||||
|
|
||||||
|
@ColorInt
|
||||||
|
public static int getColor(int index)
|
||||||
|
{
|
||||||
|
return PREDEFINED_COLORS[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
@PredefinedColors.Color
|
||||||
|
public static List<Integer> getAllPredefinedColors()
|
||||||
|
{
|
||||||
|
// 0 is reserved for "no color" option.
|
||||||
|
return IntStream.range(1, PREDEFINED_COLORS.length).boxed().toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getPredefinedColorIndex(@ColorInt int color)
|
||||||
|
{
|
||||||
|
// 0 is reserved for "no color" option.
|
||||||
|
for (int index = 1; index < PREDEFINED_COLORS.length; index++)
|
||||||
|
{
|
||||||
|
if (PREDEFINED_COLORS[index] == color)
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@FastNative
|
||||||
|
@NonNull
|
||||||
|
private static native int[] nativeGetPredefinedColors();
|
||||||
|
}
|
||||||
@@ -240,7 +240,8 @@ public class SearchToolbarController extends ToolbarController implements View.O
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public OnBackPressedCallback getBackPressedCallback() {
|
public OnBackPressedCallback getBackPressedCallback()
|
||||||
|
{
|
||||||
return mBackPressedCallback;
|
return mBackPressedCallback;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,8 @@ import android.widget.GridView;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
import app.organicmaps.base.BaseMwmDialogFragment;
|
import app.organicmaps.base.BaseMwmDialogFragment;
|
||||||
import app.organicmaps.bookmarks.IconsAdapter;
|
import app.organicmaps.bookmarks.ColorsAdapter;
|
||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
import app.organicmaps.sdk.bookmarks.data.PredefinedColors;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -19,11 +18,12 @@ public class BookmarkColorDialogFragment extends BaseMwmDialogFragment
|
|||||||
{
|
{
|
||||||
public static final String ICON_TYPE = "ExtraIconType";
|
public static final String ICON_TYPE = "ExtraIconType";
|
||||||
|
|
||||||
|
@PredefinedColors.Color
|
||||||
private int mIconColor;
|
private int mIconColor;
|
||||||
|
|
||||||
public interface OnBookmarkColorChangeListener
|
public interface OnBookmarkColorChangeListener
|
||||||
{
|
{
|
||||||
void onBookmarkColorSet(int colorPos);
|
void onBookmarkColorSet(@PredefinedColors.Color int color);
|
||||||
}
|
}
|
||||||
|
|
||||||
private OnBookmarkColorChangeListener mColorSetListener;
|
private OnBookmarkColorChangeListener mColorSetListener;
|
||||||
@@ -49,19 +49,20 @@ public class BookmarkColorDialogFragment extends BaseMwmDialogFragment
|
|||||||
mColorSetListener = listener;
|
mColorSetListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private View buildView()
|
private View buildView()
|
||||||
{
|
{
|
||||||
final List<Icon> icons = BookmarkManager.ICONS;
|
final List<Integer> colors = PredefinedColors.getAllPredefinedColors();
|
||||||
final IconsAdapter adapter = new IconsAdapter(requireActivity(), icons);
|
final ColorsAdapter adapter = new ColorsAdapter(requireActivity(), colors);
|
||||||
adapter.chooseItem(mIconColor);
|
adapter.chooseItem(mIconColor);
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
final GridView gView =
|
final GridView gView =
|
||||||
(GridView) LayoutInflater.from(requireActivity()).inflate(R.layout.fragment_color_grid, null);
|
(GridView) LayoutInflater.from(requireActivity()).inflate(R.layout.fragment_color_grid, null);
|
||||||
gView.setAdapter(adapter);
|
gView.setAdapter(adapter);
|
||||||
gView.setOnItemClickListener((arg0, who, pos, id) -> {
|
gView.setOnItemClickListener((parent, view, predefinedColor, id) -> {
|
||||||
if (mColorSetListener != null)
|
if (mColorSetListener != null)
|
||||||
mColorSetListener.onBookmarkColorSet(pos);
|
mColorSetListener.onBookmarkColorSet(predefinedColor);
|
||||||
dismiss();
|
dismiss();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import app.organicmaps.sdk.bookmarks.data.BookmarkCategory;
|
|||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkInfo;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkInfo;
|
||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Icon;
|
import app.organicmaps.sdk.bookmarks.data.Icon;
|
||||||
|
import app.organicmaps.sdk.bookmarks.data.PredefinedColors;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Track;
|
import app.organicmaps.sdk.bookmarks.data.Track;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
import app.organicmaps.util.Graphics;
|
import app.organicmaps.util.Graphics;
|
||||||
@@ -304,7 +305,7 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
|
|||||||
|
|
||||||
final Bundle args = new Bundle();
|
final Bundle args = new Bundle();
|
||||||
if (mTrack != null)
|
if (mTrack != null)
|
||||||
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, mTrack.getColor());
|
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, PredefinedColors.getPredefinedColorIndex(mColor));
|
||||||
else
|
else
|
||||||
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, mIcon.getColor());
|
args.putInt(BookmarkColorDialogFragment.ICON_TYPE, mIcon.getColor());
|
||||||
final FragmentManager manager = getChildFragmentManager();
|
final FragmentManager manager = getChildFragmentManager();
|
||||||
@@ -317,17 +318,16 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
|
|||||||
{
|
{
|
||||||
case TYPE_BOOKMARK ->
|
case TYPE_BOOKMARK ->
|
||||||
dialogFragment.setOnColorSetListener(colorPos -> {
|
dialogFragment.setOnColorSetListener(colorPos -> {
|
||||||
final Icon newIcon = BookmarkManager.ICONS.get(colorPos);
|
if (mIcon != null & mIcon.getColor() == colorPos)
|
||||||
if (mIcon.getColor() == newIcon.getColor())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mIcon = newIcon;
|
mIcon = new Icon(colorPos);
|
||||||
refreshColorMarker();
|
refreshColorMarker();
|
||||||
});
|
});
|
||||||
case TYPE_TRACK ->
|
case TYPE_TRACK ->
|
||||||
dialogFragment.setOnColorSetListener(colorPos -> {
|
dialogFragment.setOnColorSetListener(colorPos -> {
|
||||||
int from = mTrack.getColor();
|
int from = mTrack.getColor();
|
||||||
int to = BookmarkManager.ICONS.get(colorPos).argb();
|
int to = PredefinedColors.getColor(colorPos);
|
||||||
if (from == to)
|
if (from == to)
|
||||||
return;
|
return;
|
||||||
mColor = to;
|
mColor = to;
|
||||||
@@ -342,8 +342,8 @@ public class EditBookmarkFragment extends BaseMwmDialogFragment implements View.
|
|||||||
{
|
{
|
||||||
if (mIcon != null)
|
if (mIcon != null)
|
||||||
{
|
{
|
||||||
Drawable circle =
|
Drawable circle = Graphics.drawCircleAndImage(mIcon.argb(), R.dimen.track_circle_size,
|
||||||
Graphics.drawCircleAndImage(mIcon.argb(), R.dimen.track_circle_size, app.organicmaps.sdk.R.drawable.ic_bookmark_none,
|
app.organicmaps.sdk.R.drawable.ic_bookmark_none,
|
||||||
R.dimen.bookmark_icon_size, requireContext());
|
R.dimen.bookmark_icon_size, requireContext());
|
||||||
mIvColor.setImageDrawable(circle);
|
mIvColor.setImageDrawable(circle);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import app.organicmaps.R;
|
|||||||
import app.organicmaps.api.Const;
|
import app.organicmaps.api.Const;
|
||||||
import app.organicmaps.intent.Factory;
|
import app.organicmaps.intent.Factory;
|
||||||
import app.organicmaps.routing.RoutingController;
|
import app.organicmaps.routing.RoutingController;
|
||||||
|
import app.organicmaps.sdk.ChoosePositionMode;
|
||||||
import app.organicmaps.sdk.Framework;
|
import app.organicmaps.sdk.Framework;
|
||||||
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
import app.organicmaps.sdk.bookmarks.data.BookmarkManager;
|
||||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||||
@@ -33,7 +34,6 @@ import app.organicmaps.sdk.bookmarks.data.RoadWarningMarkType;
|
|||||||
import app.organicmaps.sdk.settings.RoadType;
|
import app.organicmaps.sdk.settings.RoadType;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
import app.organicmaps.sdk.util.log.Logger;
|
import app.organicmaps.sdk.util.log.Logger;
|
||||||
import app.organicmaps.sdk.ChoosePositionMode;
|
|
||||||
import app.organicmaps.util.ThemeUtils;
|
import app.organicmaps.util.ThemeUtils;
|
||||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
import app.organicmaps.util.bottomsheet.MenuBottomSheetFragment;
|
||||||
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
|
import app.organicmaps.util.bottomsheet.MenuBottomSheetItem;
|
||||||
|
|||||||
@@ -14,10 +14,10 @@ import androidx.lifecycle.Observer;
|
|||||||
import androidx.lifecycle.ViewModelProvider;
|
import androidx.lifecycle.ViewModelProvider;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import app.organicmaps.R;
|
import app.organicmaps.R;
|
||||||
|
import app.organicmaps.editor.data.TimeFormatUtils;
|
||||||
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
import app.organicmaps.sdk.bookmarks.data.MapObject;
|
||||||
import app.organicmaps.sdk.bookmarks.data.Metadata;
|
import app.organicmaps.sdk.bookmarks.data.Metadata;
|
||||||
import app.organicmaps.sdk.editor.OpeningHours;
|
import app.organicmaps.sdk.editor.OpeningHours;
|
||||||
import app.organicmaps.editor.data.TimeFormatUtils;
|
|
||||||
import app.organicmaps.sdk.editor.data.Timespan;
|
import app.organicmaps.sdk.editor.data.Timespan;
|
||||||
import app.organicmaps.sdk.editor.data.Timetable;
|
import app.organicmaps.sdk.editor.data.Timetable;
|
||||||
import app.organicmaps.sdk.util.UiUtils;
|
import app.organicmaps.sdk.util.UiUtils;
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ set(SRC
|
|||||||
app/organicmaps/sdk/core/jni_java_methods.cpp
|
app/organicmaps/sdk/core/jni_java_methods.cpp
|
||||||
app/organicmaps/sdk/core/logging.cpp
|
app/organicmaps/sdk/core/logging.cpp
|
||||||
app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp
|
app/organicmaps/sdk/bookmarks/data/BookmarkManager.cpp
|
||||||
|
app/organicmaps/sdk/bookmarks/data/PredefinedColors.cpp
|
||||||
|
app/organicmaps/sdk/bookmarks/data/PredefinedColors.hpp
|
||||||
app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp
|
app/organicmaps/sdk/DownloadResourcesLegacyActivity.cpp
|
||||||
app/organicmaps/sdk/editor/Editor.cpp
|
app/organicmaps/sdk/editor/Editor.cpp
|
||||||
app/organicmaps/sdk/editor/OpeningHours.cpp
|
app/organicmaps/sdk/editor/OpeningHours.cpp
|
||||||
|
|||||||
@@ -532,16 +532,10 @@ Java_app_organicmaps_sdk_bookmarks_data_BookmarkManager_nativeGetTrack(
|
|||||||
|
|
||||||
ASSERT(nTrack, ("Track must not be null with id:)", trackId));
|
ASSERT(nTrack, ("Track must not be null with id:)", trackId));
|
||||||
|
|
||||||
dp::Color nColor = nTrack->GetColor(0);
|
return env->NewObject(trackClazz, cId, trackId, static_cast<jlong>(nTrack->GetGroupId()),
|
||||||
|
jni::ToJavaString(env, nTrack->GetName()),
|
||||||
jint androidColor = shift(nColor.GetAlpha(), 24) +
|
ToJavaDistance(env, platform::Distance::CreateFormatted(nTrack->GetLengthMeters())),
|
||||||
shift(nColor.GetRed(), 16) +
|
nTrack->GetColor(0).GetARGB());
|
||||||
shift(nColor.GetGreen(), 8) +
|
|
||||||
nColor.GetBlue();
|
|
||||||
|
|
||||||
return env->NewObject(trackClazz, cId,
|
|
||||||
trackId, static_cast<jlong>(nTrack->GetGroupId()), jni::ToJavaString(env, nTrack->GetName()),
|
|
||||||
ToJavaDistance(env, platform::Distance::CreateFormatted(nTrack->GetLengthMeters())), androidColor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jlong JNICALL
|
JNIEXPORT jlong JNICALL
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#include "PredefinedColors.hpp"
|
||||||
|
|
||||||
|
#include "kml/types.hpp"
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
JNIEXPORT jintArray JNICALL
|
||||||
|
Java_app_organicmaps_sdk_bookmarks_data_PredefinedColors_nativeGetPredefinedColors(JNIEnv * env, jclass)
|
||||||
|
{
|
||||||
|
std::array<jint, static_cast<size_t>(kml::PredefinedColor::Count)> colors{};
|
||||||
|
for (size_t i = 0; i < static_cast<size_t>(kml::PredefinedColor::Count); ++i)
|
||||||
|
colors[i] = static_cast<jint>(kml::ColorFromPredefinedColor(static_cast<kml::PredefinedColor>(i)).GetARGB());
|
||||||
|
|
||||||
|
jintArray jColors = env->NewIntArray(colors.size());
|
||||||
|
env->SetIntArrayRegion(jColors, 0, static_cast<jsize>(colors.size()), colors.data());
|
||||||
|
return jColors;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
JNINativeMethod const methods[] = {
|
||||||
|
{"nativeGetPredefinedColors", "()[I",
|
||||||
|
reinterpret_cast<void *>(&Java_app_organicmaps_sdk_bookmarks_data_PredefinedColors_nativeGetPredefinedColors)},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace predefined_colors
|
||||||
|
{
|
||||||
|
jint registerNativeMethods(JNIEnv * env)
|
||||||
|
{
|
||||||
|
jclass clazz = env->FindClass("app/organicmaps/sdk/bookmarks/data/PredefinedColors");
|
||||||
|
if (clazz == nullptr)
|
||||||
|
return JNI_ERR;
|
||||||
|
|
||||||
|
return env->RegisterNatives(clazz, methods, std::size(methods));
|
||||||
|
}
|
||||||
|
} // namespace predefined_colors
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <jni.h>
|
||||||
|
|
||||||
|
namespace predefined_colors
|
||||||
|
{
|
||||||
|
jint registerNativeMethods(JNIEnv * env);
|
||||||
|
}
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
#include "jni_helper.hpp"
|
#include "jni_helper.hpp"
|
||||||
#include "logging.hpp"
|
|
||||||
#include "ScopedLocalRef.hpp"
|
#include "ScopedLocalRef.hpp"
|
||||||
|
#include "logging.hpp"
|
||||||
|
|
||||||
#include "base/assert.hpp"
|
#include "base/assert.hpp"
|
||||||
#include "base/exception.hpp"
|
#include "base/exception.hpp"
|
||||||
#include "base/string_utils.hpp"
|
#include "base/string_utils.hpp"
|
||||||
|
|
||||||
|
#include "app/organicmaps/sdk/bookmarks/data/PredefinedColors.hpp"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
static JavaVM * g_jvm = 0;
|
static JavaVM * g_jvm = 0;
|
||||||
@@ -31,21 +33,21 @@ extern "C"
|
|||||||
{
|
{
|
||||||
int __system_property_get(char const * name, char * value);
|
int __system_property_get(char const * name, char * value);
|
||||||
|
|
||||||
static bool IsAndroidLowerThan7()
|
static bool IsAndroidApiLowerThan(int apiLevel)
|
||||||
{
|
{
|
||||||
char value[92] = { 0 };
|
char value[92] = { 0 };
|
||||||
if (__system_property_get("ro.build.version.sdk", value) < 1)
|
if (__system_property_get("ro.build.version.sdk", value) < 1)
|
||||||
return false;
|
return false;
|
||||||
const int apiLevel = atoi(value);
|
int const deviceApiLevel = atoi(value);
|
||||||
if (apiLevel > 0 && apiLevel < 24)
|
if (deviceApiLevel > 0 && deviceApiLevel < apiLevel)
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool const g_isAndroidLowerThan7 = IsAndroidLowerThan7();
|
static bool const g_isAndroidLowerThan12 = IsAndroidApiLowerThan(30);
|
||||||
|
static bool const g_isAndroidLowerThan7 = g_isAndroidLowerThan12 && IsAndroidApiLowerThan(24);
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * jvm, void *)
|
||||||
JNI_OnLoad(JavaVM * jvm, void *)
|
|
||||||
{
|
{
|
||||||
g_jvm = jvm;
|
g_jvm = jvm;
|
||||||
jni::InitSystemLog();
|
jni::InitSystemLog();
|
||||||
@@ -64,6 +66,12 @@ JNI_OnLoad(JavaVM * jvm, void *)
|
|||||||
g_networkPolicyClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/util/NetworkPolicy");
|
g_networkPolicyClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/util/NetworkPolicy");
|
||||||
g_elevationInfoClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/bookmarks/data/ElevationInfo");
|
g_elevationInfoClazz = jni::GetGlobalClassRef(env, "app/organicmaps/sdk/bookmarks/data/ElevationInfo");
|
||||||
|
|
||||||
|
if (g_isAndroidLowerThan12)
|
||||||
|
{
|
||||||
|
if (predefined_colors::registerNativeMethods(env) != JNI_OK)
|
||||||
|
return JNI_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
return JNI_VERSION_1_6;
|
return JNI_VERSION_1_6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ struct Color
|
|||||||
constexpr uint8_t GetBlue() const { return ExtractByte(m_rgba, 1); }
|
constexpr uint8_t GetBlue() const { return ExtractByte(m_rgba, 1); }
|
||||||
constexpr uint8_t GetAlpha() const { return ExtractByte(m_rgba, 0); }
|
constexpr uint8_t GetAlpha() const { return ExtractByte(m_rgba, 0); }
|
||||||
constexpr uint32_t GetRGBA() const { return m_rgba; }
|
constexpr uint32_t GetRGBA() const { return m_rgba; }
|
||||||
|
constexpr uint32_t GetARGB() const
|
||||||
|
{
|
||||||
|
return (static_cast<uint32_t>(GetAlpha()) << 24) | (static_cast<uint32_t>(GetRed()) << 16) |
|
||||||
|
(static_cast<uint32_t>(GetGreen()) << 8) | static_cast<uint32_t>(GetBlue());
|
||||||
|
}
|
||||||
|
|
||||||
constexpr float GetRedF() const { return ChannelToFloat(GetRed()); }
|
constexpr float GetRedF() const { return ChannelToFloat(GetRed()); }
|
||||||
constexpr float GetGreenF() const { return ChannelToFloat(GetGreen()); }
|
constexpr float GetGreenF() const { return ChannelToFloat(GetGreen()); }
|
||||||
|
|||||||
@@ -15,7 +15,6 @@
|
|||||||
|
|
||||||
namespace kml
|
namespace kml
|
||||||
{
|
{
|
||||||
/// @note Important! Should be synced with android/app/src/main/java/app/organicmaps/bookmarks/data/Icon.java
|
|
||||||
enum class PredefinedColor : uint8_t
|
enum class PredefinedColor : uint8_t
|
||||||
{
|
{
|
||||||
None = 0,
|
None = 0,
|
||||||
|
|||||||
Reference in New Issue
Block a user