diff --git a/OsmAnd/res/layout/preference_colors_card.xml b/OsmAnd/res/layout/preference_colors_card.xml
new file mode 100644
index 0000000000..97ad948f70
--- /dev/null
+++ b/OsmAnd/res/layout/preference_colors_card.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/xml/profile_appearance.xml b/OsmAnd/res/xml/profile_appearance.xml
index 9c042ddeaa..87ec511b69 100644
--- a/OsmAnd/res/xml/profile_appearance.xml
+++ b/OsmAnd/res/xml/profile_appearance.xml
@@ -21,12 +21,12 @@
diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java
index e410aac3d3..f385a4af8e 100644
--- a/OsmAnd/src/net/osmand/AndroidUtils.java
+++ b/OsmAnd/src/net/osmand/AndroidUtils.java
@@ -336,6 +336,43 @@ public class AndroidUtils {
);
}
+ public static ColorStateList createCheckedColorIntStateList(@ColorInt int normal, @ColorInt int checked) {
+ return createCheckedColorIntStateList(false, normal, checked, 0, 0);
+ }
+
+ public static ColorStateList createCheckedColorIntStateList(boolean night,
+ @ColorInt int lightNormal, @ColorInt int lightChecked,
+ @ColorInt int darkNormal, @ColorInt int darkChecked) {
+ return createColorIntStateList(night, android.R.attr.state_checked,
+ lightNormal, lightChecked, darkNormal, darkChecked);
+ }
+
+ public static ColorStateList createEnabledColorIntStateList(@ColorInt int normal, @ColorInt int pressed) {
+ return createEnabledColorIntStateList(false, normal, pressed, 0, 0);
+ }
+
+ public static ColorStateList createEnabledColorIntStateList(boolean night,
+ @ColorInt int lightNormal, @ColorInt int lightPressed,
+ @ColorInt int darkNormal, @ColorInt int darkPressed) {
+ return createColorIntStateList(night, android.R.attr.state_enabled,
+ lightNormal, lightPressed, darkNormal, darkPressed);
+ }
+
+ private static ColorStateList createColorIntStateList(boolean night, int state,
+ @ColorInt int lightNormal, @ColorInt int lightState,
+ @ColorInt int darkNormal, @ColorInt int darkState) {
+ return new ColorStateList(
+ new int[][]{
+ new int[]{state},
+ new int[]{}
+ },
+ new int[]{
+ night ? darkState : lightState,
+ night ? darkNormal : lightNormal
+ }
+ );
+ }
+
public static StateListDrawable createCheckedStateListDrawable(Drawable normal, Drawable checked) {
return createStateListDrawable(normal, checked, android.R.attr.state_checked);
}
diff --git a/OsmAnd/src/net/osmand/aidl/ConnectedApp.java b/OsmAnd/src/net/osmand/aidl/ConnectedApp.java
index bbfa4f89b8..b8a467d991 100644
--- a/OsmAnd/src/net/osmand/aidl/ConnectedApp.java
+++ b/OsmAnd/src/net/osmand/aidl/ConnectedApp.java
@@ -133,7 +133,7 @@ public class ConnectedApp implements Comparable {
CompoundButton btn = view.findViewById(R.id.toggle_item);
if (btn != null && btn.getVisibility() == View.VISIBLE) {
btn.setChecked(!btn.isChecked());
- menuAdapter.getItem(position).setColorRes(btn.isChecked() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ menuAdapter.getItem(position).setColor(app, btn.isChecked() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
return false;
}
@@ -146,7 +146,7 @@ public class ConnectedApp implements Comparable {
if (layersPref.set(isChecked)) {
ContextMenuItem item = adapter.getItem(position);
if (item != null) {
- item.setColorRes(isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setSelected(isChecked);
adapter.notifyDataSetChanged();
}
@@ -162,7 +162,7 @@ public class ConnectedApp implements Comparable {
.setListener(listener)
.setSelected(layersEnabled)
.setIcon(R.drawable.ic_extension_dark)
- .setColor(layersEnabled ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, layersEnabled ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.createItem());
}
diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java
index 381125e0ec..5fdea403d3 100644
--- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java
@@ -249,8 +249,7 @@ public class ContextMenuAdapter {
final ContextMenuItem item = getItem(position);
int layoutId = item.getLayout();
layoutId = layoutId != ContextMenuItem.INVALID_ID ? layoutId : DEFAULT_LAYOUT_ID;
- int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode);
- int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
+ int currentModeColor = app.getSettings().getApplicationMode().getProfileColor(nightMode);
if (layoutId == R.layout.mode_toggles) {
final Set selected = new LinkedHashSet<>();
return AppModeDialog.prepareAppModeDrawerView((Activity) getContext(),
@@ -278,15 +277,13 @@ public class ContextMenuAdapter {
}
if (layoutId == R.layout.main_menu_drawer_btn_switch_profile ||
layoutId == R.layout.main_menu_drawer_btn_configure_profile) {
- int colorResId = item.getColorRes();
- int colorNoAlpha = ContextCompat.getColor(app, colorResId);
-
+ int colorNoAlpha = item.getColor();
TextView title = convertView.findViewById(R.id.title);
title.setText(item.getTitle());
if (layoutId == R.layout.main_menu_drawer_btn_switch_profile) {
ImageView icon = convertView.findViewById(R.id.icon);
- icon.setImageDrawable(mIconsCache.getIcon(item.getIcon(), colorResId));
+ icon.setImageDrawable(mIconsCache.getPaintedIcon(item.getIcon(), colorNoAlpha));
ImageView icArrow = convertView.findViewById(R.id.ic_expand_list);
icArrow.setImageDrawable(mIconsCache.getIcon(item.getSecondaryIcon()));
TextView desc = convertView.findViewById(R.id.description);
@@ -306,16 +303,13 @@ public class ContextMenuAdapter {
return convertView;
}
if (layoutId == R.layout.profile_list_item) {
-
int tag = item.getTag();
-
- int colorResId = item.getColorRes();
- int colorNoAlpha = ContextCompat.getColor(app, colorResId);
+ int colorNoAlpha = item.getColor();
TextView title = convertView.findViewById(R.id.title);
TextView desc = convertView.findViewById(R.id.description);
ImageView icon = convertView.findViewById(R.id.icon);
title.setText(item.getTitle());
-
+
convertView.findViewById(R.id.divider_up).setVisibility(View.INVISIBLE);
convertView.findViewById(R.id.divider_bottom).setVisibility(View.INVISIBLE);
convertView.findViewById(R.id.menu_image).setVisibility(View.GONE);
@@ -331,7 +325,7 @@ public class ContextMenuAdapter {
AndroidUiHelper.updateVisibility(icon, true);
AndroidUiHelper.updateVisibility(desc, true);
AndroidUtils.setTextPrimaryColor(app, title, nightMode);
- icon.setImageDrawable(mIconsCache.getIcon(item.getIcon(), colorResId));
+ icon.setImageDrawable(mIconsCache.getPaintedIcon(item.getIcon(), colorNoAlpha));
desc.setText(item.getDescription());
boolean selectedMode = tag == PROFILES_CHOSEN_PROFILE_TAG;
if (selectedMode) {
@@ -419,17 +413,18 @@ public class ContextMenuAdapter {
}
} else {
if (item.getIcon() != ContextMenuItem.INVALID_ID) {
- int colorRes = item.getColorRes();
- if (colorRes == ContextMenuItem.INVALID_ID) {
- if (!item.shouldSkipPainting()) {
- colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark;
- } else {
- colorRes = 0;
- }
+ Integer color = item.getColor();
+ Drawable drawable;
+ if (color == null) {
+ int colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark;
+ colorRes = item.shouldSkipPainting() ? 0 : colorRes;
+ drawable = mIconsCache.getIcon(item.getIcon(), colorRes);
} else if (profileDependent) {
- colorRes = currentModeColorRes;
+ drawable = mIconsCache.getPaintedIcon(item.getIcon(), currentModeColor);
+ } else {
+ drawable = mIconsCache.getPaintedIcon(item.getIcon(), color);
}
- final Drawable drawable = mIconsCache.getIcon(item.getIcon(), colorRes);
+
((AppCompatImageView) convertView.findViewById(R.id.icon)).setImageDrawable(drawable);
convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE);
} else if (convertView.findViewById(R.id.icon) != null) {
diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuItem.java b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java
index 3718169532..1ab526cbeb 100644
--- a/OsmAnd/src/net/osmand/plus/ContextMenuItem.java
+++ b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java
@@ -19,8 +19,8 @@ public class ContextMenuItem {
private String title;
@DrawableRes
private int mIcon;
- @ColorRes
- private int colorRes;
+ @ColorInt
+ private Integer color;
@DrawableRes
private int secondaryIcon;
private Boolean selected;
@@ -48,7 +48,7 @@ public class ContextMenuItem {
private ContextMenuItem(@StringRes int titleId,
String title,
@DrawableRes int icon,
- @ColorRes int colorRes,
+ @ColorInt Integer color,
@DrawableRes int secondaryIcon,
Boolean selected,
int progress,
@@ -72,7 +72,7 @@ public class ContextMenuItem {
this.titleId = titleId;
this.title = title;
this.mIcon = icon;
- this.colorRes = colorRes;
+ this.color = color;
this.secondaryIcon = secondaryIcon;
this.selected = selected;
this.progress = progress;
@@ -109,23 +109,17 @@ public class ContextMenuItem {
return mIcon;
}
- @ColorRes
- public int getColorRes() {
- return colorRes;
- }
-
- @ColorRes
- public int getThemedColorRes(Context context) {
- if (skipPaintingWithoutColor || getColorRes() != INVALID_ID) {
- return getColorRes();
- } else {
- return UiUtilities.getDefaultColorRes(context);
- }
+ @ColorInt
+ public Integer getColor() {
+ return color;
}
@ColorInt
public int getThemedColor(Context context) {
- return ContextCompat.getColor(context, getThemedColorRes(context));
+ if (skipPaintingWithoutColor || color != null) {
+ return color;
+ }
+ return ContextCompat.getColor(context, UiUtilities.getDefaultColorRes(context));
}
@DrawableRes
@@ -212,8 +206,10 @@ public class ContextMenuItem {
this.secondaryIcon = secondaryIcon;
}
- public void setColorRes(int colorRes) {
- this.colorRes = colorRes;
+ public void setColor(Context context, @ColorRes int colorRes) {
+ if (colorRes != INVALID_ID) {
+ this.color = ContextCompat.getColor(context, colorRes);
+ }
}
public void setSelected(boolean selected) {
@@ -268,8 +264,8 @@ public class ContextMenuItem {
private String mTitle;
@DrawableRes
private int mIcon = INVALID_ID;
- @ColorRes
- private int mColorRes = INVALID_ID;
+ @ColorInt
+ private Integer mColor = null;
@DrawableRes
private int mSecondaryIcon = INVALID_ID;
private Boolean mSelected = null;
@@ -307,8 +303,15 @@ public class ContextMenuItem {
return this;
}
- public ItemBuilder setColor(@ColorRes int colorRes) {
- mColorRes = colorRes;
+ public ItemBuilder setColor(@ColorInt Integer color) {
+ mColor = color;
+ return this;
+ }
+
+ public ItemBuilder setColor(Context context, @ColorRes int colorRes) {
+ if (colorRes != INVALID_ID) {
+ mColor = ContextCompat.getColor(context, colorRes);
+ }
return this;
}
@@ -422,7 +425,7 @@ public class ContextMenuItem {
}
public ContextMenuItem createItem() {
- ContextMenuItem item = new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mSecondaryIcon,
+ ContextMenuItem item = new ContextMenuItem(mTitleId, mTitle, mIcon, mColor, mSecondaryIcon,
mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor,
mOrder, mDescription, mOnUpdateCallback, mItemClickListener, mIntegerListener, mProgressListener,
mItemDeleteAction, mHideDivider, mHideCompoundButton, mMinHeight, mTag, mId);
diff --git a/OsmAnd/src/net/osmand/plus/OsmAndLocationSimulation.java b/OsmAnd/src/net/osmand/plus/OsmAndLocationSimulation.java
index 0b2683fcc6..2dbd4f6dd9 100644
--- a/OsmAnd/src/net/osmand/plus/OsmAndLocationSimulation.java
+++ b/OsmAnd/src/net/osmand/plus/OsmAndLocationSimulation.java
@@ -59,7 +59,7 @@ public class OsmAndLocationSimulation {
boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
ApplicationMode appMode = app.getSettings().getApplicationMode();
- int selectedModeColor = ContextCompat.getColor(app, appMode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = appMode.getProfileColor(nightMode);
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ma, themeRes));
builder.setTitle(R.string.animate_route);
diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java
index aaa9d01f8b..269800c630 100644
--- a/OsmAnd/src/net/osmand/plus/UiUtilities.java
+++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java
@@ -553,7 +553,7 @@ public class UiUtilities {
switch (type) {
case PROFILE_DEPENDENT:
ApplicationMode appMode = app.getSettings().getApplicationMode();
- activeColor = ContextCompat.getColor(app, appMode.getIconColorInfo().getColor(nightMode));
+ activeColor = appMode.getProfileColor(nightMode);
break;
case TOOLBAR:
activeColor = Color.WHITE;
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
index 2bb6f5caec..bfc5077b2e 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java
@@ -753,7 +753,7 @@ public class MapActivityActions implements DialogProvider {
optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item)
.setIcon(appMode.getIconRes())
- .setColor(appMode.getIconColorInfo().getColor(nightMode))
+ .setColor(appMode.getProfileColor(nightMode))
.setTag(tag)
.setTitle(appMode.toHumanString())
.setDescription(modeDescription)
@@ -770,7 +770,7 @@ public class MapActivityActions implements DialogProvider {
int activeColorPrimaryResId = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item)
- .setColor(activeColorPrimaryResId)
+ .setColor(app, activeColorPrimaryResId)
.setTag(PROFILES_CONTROL_BUTTON_TAG)
.setTitle(getString(R.string.shared_string_manage))
.setListener(new ItemClickListener() {
@@ -1083,7 +1083,7 @@ public class MapActivityActions implements DialogProvider {
.setId(DRAWER_SWITCH_PROFILE_ID)
.setIcon(currentMode.getIconRes())
.setSecondaryIcon(icArrowResId)
- .setColor(currentMode.getIconColorInfo().getColor(nightMode))
+ .setColor(currentMode.getProfileColor(nightMode))
.setTitle(currentMode.toHumanString())
.setDescription(modeDescription)
.setListener(new ItemClickListener() {
@@ -1097,7 +1097,7 @@ public class MapActivityActions implements DialogProvider {
.createItem());
optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.main_menu_drawer_btn_configure_profile)
.setId(DRAWER_CONFIGURE_PROFILE_ID)
- .setColor(currentMode.getIconColorInfo().getColor(nightMode))
+ .setColor(currentMode.getProfileColor(nightMode))
.setTitle(getString(R.string.configure_profile))
.setListener(new ItemClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java
index 8c0d09f150..ccdef9484e 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityLayers.java
@@ -437,7 +437,7 @@ public class MapActivityLayers {
} else {
builder.setIcon(R.drawable.mx_user_defined);
}
- builder.setColor(ContextMenuItem.INVALID_ID);
+ builder.setColor(activity, ContextMenuItem.INVALID_ID);
builder.setSkipPaintingWithoutColor(true);
adapter.addItem(builder.createItem());
}
@@ -495,7 +495,7 @@ public class MapActivityLayers {
OsmandApplication app = getApplication();
boolean nightMode = isNightMode(app);
int themeRes = getThemeRes(app);
- int selectedModeColor = ContextCompat.getColor(app, settings.getApplicationMode().getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = settings.getApplicationMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
items, nightMode, selectedItem, app, selectedModeColor, themeRes, new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
index 44222d5586..639bed2bdf 100644
--- a/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
+++ b/OsmAnd/src/net/osmand/plus/activities/actions/AppModeDialog.java
@@ -120,13 +120,13 @@ public class AppModeDialog {
final View selection = tb.findViewById(R.id.selection);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon);
if (checked) {
- iv.setImageDrawable(ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode)));
+ iv.setImageDrawable(ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode)));
iv.setContentDescription(String.format("%s %s", mode.toHumanString(), ctx.getString(R.string.item_checked)));
- selection.setBackgroundResource(mode.getIconColorInfo().getColor(nightMode));
+ selection.setBackgroundColor(mode.getProfileColor(nightMode));
selection.setVisibility(View.VISIBLE);
} else {
if (useMapTheme) {
- iv.setImageDrawable(ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode)));
+ iv.setImageDrawable(ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode)));
iv.setBackgroundResource(AndroidUtils.resolveAttribute(themedCtx, android.R.attr.selectableItemBackground));
} else {
iv.setImageDrawable(ctx.getUIUtilities().getThemedIcon(mode.getIconRes()));
@@ -171,7 +171,7 @@ public class AppModeDialog {
final boolean checked = selected.contains(mode);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon);
ImageView selection = tb.findViewById(R.id.selection);
- Drawable drawable = ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode));
+ Drawable drawable = ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode));
if (checked) {
iv.setImageDrawable(drawable);
iv.setContentDescription(String.format("%s %s", mode.toHumanString(), ctx.getString(R.string.item_checked)));
@@ -184,7 +184,7 @@ public class AppModeDialog {
} else {
if (useMapTheme) {
if (Build.VERSION.SDK_INT >= 21) {
- Drawable active = ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode));
+ Drawable active = ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode));
drawable = AndroidUtils.createPressedStateListDrawable(drawable, active);
}
iv.setImageDrawable(drawable);
@@ -195,7 +195,7 @@ public class AppModeDialog {
AndroidUtils.setBackground(ctx, selection, nightMode, R.drawable.btn_border_pressed_trans_light, R.drawable.btn_border_pressed_trans_light);
}
} else {
- iv.setImageDrawable(ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode)));
+ iv.setImageDrawable(ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode)));
}
iv.setContentDescription(String.format("%s %s", mode.toHumanString(), ctx.getString(R.string.item_unchecked)));
}
@@ -232,7 +232,7 @@ public class AppModeDialog {
int metricsY = (int) ctx.getResources().getDimension(R.dimen.route_info_modes_height);
View tb = layoutInflater.inflate(layoutId, null);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon);
- iv.setImageDrawable(ctx.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(isNightMode(ctx, useMapTheme))));
+ iv.setImageDrawable(ctx.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(isNightMode(ctx, useMapTheme))));
iv.setContentDescription(mode.toHumanString());
// tb.setCompoundDrawablesWithIntrinsicBounds(null, ctx.getIconsCache().getIcon(mode.getIconId(), R.color.app_mode_icon_color), null, null);
LayoutParams lp = new LinearLayout.LayoutParams(metricsX, metricsY);
diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
index c8c9a70785..4728c0bce3 100644
--- a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
+++ b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
@@ -121,7 +121,7 @@ public class StartGPSStatus extends OsmAndAction {
cb.setLayoutParams(lp);
cb.setPadding(dp8, 0, 0, 0);
int textColorPrimary = ContextCompat.getColor(activity, isNightMode() ? R.color.text_color_primary_dark : R.color.text_color_primary_light);
- int selectedModeColor = ContextCompat.getColor(activity, getSettings().getApplicationMode().getIconColorInfo().getColor(isNightMode()));
+ int selectedModeColor = getSettings().getApplicationMode().getProfileColor(isNightMode());
cb.setTextColor(textColorPrimary);
UiUtilities.setupCompoundButton(isNightMode(), selectedModeColor, cb);
diff --git a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
index b7f15624b4..6d425ef65e 100644
--- a/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/audionotes/AudioVideoNotesPlugin.java
@@ -678,7 +678,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
if (itemId == R.string.layer_recordings) {
SHOW_RECORDINGS.set(!SHOW_RECORDINGS.get());
- adapter.getItem(pos).setColorRes(SHOW_RECORDINGS.get() ?
+ adapter.getItem(pos).setColor(app, SHOW_RECORDINGS.get() ?
R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
updateLayers(mapView, mapActivity);
@@ -690,7 +690,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
.setId(RECORDING_LAYER)
.setSelected(SHOW_RECORDINGS.get())
.setIcon(R.drawable.ic_action_micro_dark)
- .setColor(SHOW_RECORDINGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(mapActivity, SHOW_RECORDINGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setItemDeleteAction(makeDeleteAction(SHOW_RECORDINGS))
.setListener(listener).createItem());
}
diff --git a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
index c33b183b65..4a9924fd0e 100644
--- a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java
@@ -10,6 +10,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -91,6 +92,16 @@ public abstract class BottomSheetDialogFragment extends DialogFragment {
}
}
+ @Nullable
+ protected Drawable getPaintedIcon(@DrawableRes int drawableRes, @ColorInt int color) {
+ OsmandApplication app = getMyApplication();
+ if (app != null) {
+ return app.getUIUtilities().getPaintedIcon(drawableRes, color);
+ } else {
+ return null;
+ }
+ }
+
@Nullable
protected Drawable getContentIcon(@DrawableRes int drawableRes) {
OsmandApplication app = getMyApplication();
diff --git a/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java b/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java
index 10fa8a461e..a8c508433e 100644
--- a/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java
+++ b/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java
@@ -8,6 +8,7 @@ import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.LayoutRes;
import androidx.core.content.ContextCompat;
@@ -22,6 +23,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
private ColorStateList buttonTintList;
private OnCheckedChangeListener onCheckedChangeListener;
@ColorRes private int compoundButtonColorId;
+ @ColorInt private Integer compoundButtonColor;
private CompoundButton compoundButton;
@@ -80,6 +82,10 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
this.compoundButtonColorId = compoundButtonColorId;
}
+ public void setCompoundButtonColor(@ColorInt int compoundButtonColor) {
+ this.compoundButtonColor = compoundButtonColor;
+ }
+
public CompoundButton getCompoundButton() {
return compoundButton;
}
@@ -91,7 +97,9 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
if (compoundButton != null) {
compoundButton.setChecked(checked);
compoundButton.setOnCheckedChangeListener(onCheckedChangeListener);
- if (compoundButtonColorId != INVALID_ID) {
+ if (compoundButtonColor != null) {
+ UiUtilities.setupCompoundButton(nightMode, compoundButtonColor, compoundButton);
+ } else if (compoundButtonColorId != INVALID_ID) {
UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(context, compoundButtonColorId), compoundButton);
} else {
CompoundButtonCompat.setButtonTintList(compoundButton, buttonTintList);
@@ -105,6 +113,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
protected ColorStateList buttonTintList;
protected OnCheckedChangeListener onCheckedChangeListener;
@ColorRes protected int compoundButtonColorId = INVALID_ID;
+ @ColorInt protected Integer compoundButtonColor = null;
public Builder setChecked(boolean checked) {
this.checked = checked;
@@ -125,6 +134,11 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
this.compoundButtonColorId = compoundButtonColorId;
return this;
}
+
+ public Builder setCompoundButtonColor(@ColorInt int compoundButtonColor) {
+ this.compoundButtonColor = compoundButtonColor;
+ return this;
+ }
public BottomSheetItemWithCompoundButton create() {
return new BottomSheetItemWithCompoundButton(customView,
diff --git a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java
index 5b8f38d2b9..5a69f5b2cd 100644
--- a/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java
+++ b/OsmAnd/src/net/osmand/plus/dialogs/ConfigureMapMenu.java
@@ -172,7 +172,7 @@ public class ConfigureMapMenu {
final MapActivity activity, final int themeRes, final boolean nightMode) {
final OsmandApplication app = activity.getMyApplication();
final OsmandSettings settings = app.getSettings();
- final int selectedProfileColorRes = settings.getApplicationMode().getIconColorInfo().getColor(nightMode);
+ final int selectedProfileColor = settings.getApplicationMode().getProfileColor(nightMode);
MapLayerMenuListener l = new MapLayerMenuListener(activity, adapter);
adapter.addItem(new ContextMenuItem.ItemBuilder()
.setId(SHOW_CATEGORY_ID)
@@ -184,7 +184,7 @@ public class ConfigureMapMenu {
.setId(FAVORITES_ID)
.setTitleId(R.string.shared_string_favorites, activity)
.setSelected(settings.SHOW_FAVORITES.get())
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_favorite)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_FAVORITES))
.setListener(l)
@@ -196,7 +196,7 @@ public class ConfigureMapMenu {
.setTitleId(R.string.layer_poi, activity)
.setSelected(selected)
.setDescription(app.getPoiFilters().getSelectedPoiFiltersName(wiki))
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_info_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(l).createItem());
@@ -205,7 +205,7 @@ public class ConfigureMapMenu {
.setId(POI_OVERLAY_LABELS_ID)
.setTitleId(R.string.layer_amenity_label, activity)
.setSelected(settings.SHOW_POI_LABEL.get())
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_text_dark)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_POI_LABEL))
.setListener(l).createItem());
@@ -217,7 +217,7 @@ public class ConfigureMapMenu {
.setIcon(R.drawable.ic_action_transport_bus)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setSelected(selected)
- .setColor(selected ? selectedProfileColorRes : ContextMenuItem.INVALID_ID)
+ .setColor(selected ? selectedProfileColor : null)
.setListener(l).createItem());
selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles();
@@ -226,7 +226,7 @@ public class ConfigureMapMenu {
.setTitleId(R.string.layer_gpx_layer, activity)
.setSelected(app.getSelectedGpxHelper().isShowingAnyGpxFiles())
.setDescription(app.getSelectedGpxHelper().getGpxDescription())
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_polygom_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(l).createItem());
@@ -236,7 +236,7 @@ public class ConfigureMapMenu {
.setId(MAP_MARKERS_ID)
.setTitleId(R.string.map_markers, activity)
.setSelected(selected)
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_flag)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_MAP_MARKERS))
.setListener(l).createItem());
@@ -267,8 +267,7 @@ public class ConfigureMapMenu {
final int themeRes, final boolean nightMode) {
final OsmandApplication app = activity.getMyApplication();
final OsmandSettings settings = app.getSettings();
- final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode);
- final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes);
+ final int selectedProfileColor = settings.APPLICATION_MODE.get().getProfileColor(nightMode);
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity)
.setId(MAP_RENDERING_CATEGORY_ID)
@@ -705,7 +704,6 @@ public class ConfigureMapMenu {
for (int i = 0; i < prefs.size(); i++) {
prefs.get(i).set(false);
}
- adapter.getItem(pos).setColorRes(ContextMenuItem.INVALID_ID);
a.notifyDataSetInvalidated();
activity.refreshMapComplete();
activity.getMapLayers().updateLayers(activity.getMapView());
@@ -739,7 +737,7 @@ public class ConfigureMapMenu {
}
}
}
- builder.setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ builder.setColor(activity, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
if (useDescription) {
final String descr = getDescription(prefs, includedPrefs);
builder.setDescription(descr);
@@ -840,7 +838,7 @@ public class ConfigureMapMenu {
selected |= prefs.get(i).get();
}
adapter.getItem(pos).setSelected(selected);
- adapter.getItem(pos).setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ adapter.getItem(pos).setColor(activity, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
a.notifyDataSetInvalidated();
}
});
@@ -875,7 +873,7 @@ public class ConfigureMapMenu {
} else {
adapter.getItem(pos).setSelected(selected);
}
- adapter.getItem(pos).setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ adapter.getItem(pos).setColor(activity, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
}
a.notifyDataSetInvalidated();
activity.refreshMapComplete();
diff --git a/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java b/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java
index 673f1ce3e7..fbfc5e6fc6 100644
--- a/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java
@@ -98,7 +98,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
@Override
public void createMenuItems(Bundle savedInstanceState) {
- int selectedProfileColorRes = app.getSettings().APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode);
+ int selectedProfileColor = app.getSettings().APPLICATION_MODE.get().getProfileColor(nightMode);
float spacing = getResources().getDimension(R.dimen.line_spacing_extra_description);
LinearLayout linearLayout = new LinearLayout(app);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
@@ -139,7 +139,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
streetLightsNightPref.set(!onLeftClick);
}
})
- .setCompoundButtonColorId(selectedProfileColorRes)
+ .setCompoundButtonColor(selectedProfileColor)
.setChecked(pref.get())
.setTitle(propertyName)
.setIconHidden(true)
@@ -160,7 +160,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
} else if (!STREET_LIGHTING_NIGHT.equals(property.getAttrName())) {
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(selectedProfileColorRes)
+ .setCompoundButtonColor(selectedProfileColor)
.setChecked(pref.get())
.setTitle(propertyName)
.setIconHidden(true)
@@ -217,7 +217,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
}
if (adapter != null) {
adapter.getItem(position).setSelected(checked);
- adapter.getItem(position).setColorRes(checked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ adapter.getItem(position).setColor(app, checked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.getItem(position).setDescription(getString(
R.string.ltr_or_rtl_combine_via_slash,
String.valueOf(selected),
diff --git a/OsmAnd/src/net/osmand/plus/dialogs/MapLayerMenuListener.java b/OsmAnd/src/net/osmand/plus/dialogs/MapLayerMenuListener.java
index 29a64bcee4..d3f6fc053d 100644
--- a/OsmAnd/src/net/osmand/plus/dialogs/MapLayerMenuListener.java
+++ b/OsmAnd/src/net/osmand/plus/dialogs/MapLayerMenuListener.java
@@ -77,7 +77,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
public boolean processResult(Boolean result) {
if (item != null) {
item.setSelected(result);
- item.setColorRes(result ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(mapActivity, result ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
return true;
@@ -86,7 +86,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = TransportLinesMenu.isShowLines(mapActivity.getMyApplication());
if (!selected && item != null) {
item.setSelected(true);
- item.setColorRes(R.color.osmand_orange);
+ item.setColor(mapActivity, R.color.osmand_orange);
adapter.notifyDataSetChanged();
}
return false;
@@ -94,7 +94,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item);
if (btn != null && btn.getVisibility() == View.VISIBLE) {
btn.setChecked(!btn.isChecked());
- menuAdapter.getItem(pos).setColorRes(btn.isChecked() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ menuAdapter.getItem(pos).setColor(mapActivity, btn.isChecked() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
return false;
} else {
@@ -110,7 +110,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
final PoiFiltersHelper poiFiltersHelper = mapActivity.getMyApplication().getPoiFilters();
final ContextMenuItem item = menuAdapter.getItem(pos);
if (item.getSelected() != null) {
- item.setColorRes(isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(mapActivity, isChecked ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
}
if (itemId == R.string.layer_poi) {
PoiUIFilter wiki = poiFiltersHelper.getTopWikiPoiFilter();
@@ -139,7 +139,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
@Override
public boolean processResult(Boolean result) {
item.setSelected(result);
- item.setColorRes(result ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(mapActivity, result ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
return true;
}
@@ -171,7 +171,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles();
item.setSelected(selected);
item.setDescription(app.getSelectedGpxHelper().getGpxDescription());
- item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(mapActivity, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
});
@@ -189,7 +189,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = pf.isShowingAnyPoi(wiki);
item.setSelected(selected);
item.setDescription(pf.getSelectedPoiFiltersName(wiki));
- item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(mapActivity, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
};
diff --git a/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java b/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java
index 4c5f199824..5b7ba9cc9e 100644
--- a/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java
@@ -174,8 +174,8 @@ public class SelectMapViewQuickActionsBottomSheet extends MenuBottomSheetDialogF
if (appMode != null) {
boolean selected = key.equals(selectedItem);
int iconId = appMode.getIconRes();
- int colorId = appMode.getIconColorInfo().getColor(nightMode);
- Drawable icon = getIcon(iconId, colorId);
+ int color = appMode.getProfileColor(nightMode);
+ Drawable icon = getPaintedIcon(iconId, color);
String translatedName = appMode.toHumanString();
createItemRow(selected, counter, icon, translatedName, key);
counter++;
diff --git a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
index 3081c0680b..3b259ab241 100644
--- a/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
+++ b/OsmAnd/src/net/osmand/plus/download/ui/LocalIndexesFragment.java
@@ -516,13 +516,13 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
.setTitleId(R.string.shared_string_refresh, getContext())
.setIcon(R.drawable.ic_action_refresh_dark)
.setListener(listener)
- .setColor(iconColorResId)
+ .setColor(getContext(), iconColorResId)
.createItem());
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.shared_string_delete, getContext())
.setIcon(R.drawable.ic_action_delete_dark)
.setListener(listener)
- .setColor(iconColorResId)
+ .setColor(getContext(), iconColorResId)
.createItem());
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.local_index_mi_backup, getContext())
@@ -554,7 +554,7 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
}
if (contextMenuItem.getIcon() != -1) {
- Drawable icMenuItem = getMyApplication().getUIUtilities().getIcon(contextMenuItem.getIcon(), contextMenuItem.getColorRes());
+ Drawable icMenuItem = getMyApplication().getUIUtilities().getPaintedIcon(contextMenuItem.getIcon(), contextMenuItem.getColor());
item.setIcon(icMenuItem);
}
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
index e59ce02373..84a1d64714 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/editors/PointEditorFragmentNew.java
@@ -474,7 +474,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment implemen
if (!ColorDialogs.isPaletteColor(customColor)) {
colors.add(customColor);
}
- colorsCard = new ColorsCard(mapActivity, selectedColor, this, colors);
+ colorsCard = new ColorsCard(mapActivity, selectedColor, this, colors, app.getSettings().CUSTOM_TRACK_COLORS, null);
colorsCard.setListener(this);
LinearLayout selectColor = view.findViewById(R.id.select_color);
selectColor.addView(colorsCard.build(view.getContext()));
diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java
index 6b03cd3a6a..3cf0398d87 100644
--- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryFiltersFragment.java
@@ -61,8 +61,7 @@ public class MapillaryFiltersFragment extends BaseOsmAndFragment {
final int backgroundColor = ContextCompat.getColor(getActivity(),
nightMode ? R.color.activity_background_color_dark : R.color.activity_background_color_light);
final DateFormat dateFormat = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM);
- final int currentModeColorRes = getMyApplication().getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode);
- final int currentModeColor = ContextCompat.getColor(getActivity(), currentModeColorRes);
+ final int currentModeColor = getMyApplication().getSettings().getApplicationMode().getProfileColor(nightMode);
final View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.fragment_mapillary_filters, null);
view.findViewById(R.id.mapillary_filters_linear_layout).setBackgroundColor(backgroundColor);
@@ -71,17 +70,17 @@ public class MapillaryFiltersFragment extends BaseOsmAndFragment {
final View toggleRow = view.findViewById(R.id.toggle_row);
final boolean selected = settings.SHOW_MAPILLARY.get();
final int toggleActionStringId = selected ? R.string.shared_string_on : R.string.shared_string_off;
- int toggleIconColorId;
+ int toggleIconColor;
int toggleIconId;
if (selected) {
toggleIconId = R.drawable.ic_action_view;
- toggleIconColorId = currentModeColorRes;
+ toggleIconColor = currentModeColor;
} else {
toggleIconId = R.drawable.ic_action_hide;
- toggleIconColorId = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light;
+ toggleIconColor = ContextCompat.getColor(getContext(), nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light);
}
((AppCompatTextView) toggleRow.findViewById(R.id.toggle_row_title)).setText(toggleActionStringId);
- final Drawable drawable = getIcon(toggleIconId, toggleIconColorId);
+ final Drawable drawable = getPaintedContentIcon(toggleIconId, toggleIconColor);
((AppCompatImageView) toggleRow.findViewById(R.id.toggle_row_icon)).setImageDrawable(drawable);
final CompoundButton toggle = (CompoundButton) toggleRow.findViewById(R.id.toggle_row_toggle);
toggle.setOnCheckedChangeListener(null);
diff --git a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryPlugin.java b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryPlugin.java
index bc2b0dbc95..4be50700cc 100644
--- a/OsmAnd/src/net/osmand/plus/mapillary/MapillaryPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/mapillary/MapillaryPlugin.java
@@ -185,7 +185,7 @@ public class MapillaryPlugin extends OsmandPlugin {
ContextMenuItem item = adapter.getItem(pos);
if (item != null) {
item.setSelected(settings.SHOW_MAPILLARY.get());
- item.setColorRes(settings.SHOW_MAPILLARY.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, settings.SHOW_MAPILLARY.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
}
@@ -201,7 +201,7 @@ public class MapillaryPlugin extends OsmandPlugin {
.setTitleId(R.string.street_level_imagery, mapActivity)
.setDescription("Mapillary")
.setSelected(settings.SHOW_MAPILLARY.get())
- .setColor(settings.SHOW_MAPILLARY.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, settings.SHOW_MAPILLARY.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_mapillary)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_MAPILLARY))
diff --git a/OsmAnd/src/net/osmand/plus/mapsource/InputZoomLevelsBottomSheet.java b/OsmAnd/src/net/osmand/plus/mapsource/InputZoomLevelsBottomSheet.java
index fcf881c0eb..2d883e223c 100644
--- a/OsmAnd/src/net/osmand/plus/mapsource/InputZoomLevelsBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/mapsource/InputZoomLevelsBottomSheet.java
@@ -99,8 +99,7 @@ public class InputZoomLevelsBottomSheet extends MenuBottomSheetDialogFragment {
final TextView maxZoomValue = sliderView.findViewById(R.id.zoom_value_max);
maxZoomValue.setText(String.valueOf(maxZoom));
RangeSlider slider = sliderView.findViewById(R.id.zoom_slider);
- int colorProfileRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode);
- int colorProfile = ContextCompat.getColor(app, colorProfileRes);
+ int colorProfile = app.getSettings().getApplicationMode().getProfileColor(nightMode);
UiUtilities.setupSlider(slider, nightMode, colorProfile, true);
slider.setValueFrom(SLIDER_FROM);
slider.setValueTo(SLIDER_TO);
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
index bf6ee212dc..5454febb86 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
@@ -1350,7 +1350,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
snapToRoadBtn.setVisibility(View.VISIBLE);
profileWithConfig.setVisibility(View.GONE);
} else {
- icon = getIcon(appMode.getIconRes(), appMode.getIconColorInfo().getColor(nightMode));
+ icon = getPaintedContentIcon(appMode.getIconRes(), appMode.getProfileColor(nightMode));
snapToRoadBtn.setVisibility(View.GONE);
profileWithConfig.setVisibility(View.VISIBLE);
}
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java
index 35397f269e..8c8eacee67 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java
@@ -55,7 +55,7 @@ public class OptionsBottomSheetDialogFragment extends MenuBottomSheetDialogFragm
icon = getContentIcon(R.drawable.ic_action_split_interval);
} else {
description = routeAppMode.toHumanString();
- icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode));
+ icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode));
}
} else {
description = getString(R.string.shared_string_undefined);
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/ProfileCard.java b/OsmAnd/src/net/osmand/plus/measurementtool/ProfileCard.java
index 8fc3be3037..179ad54645 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/ProfileCard.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/ProfileCard.java
@@ -49,7 +49,7 @@ public class ProfileCard extends BaseCard {
for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(i);
LinearLayout container = view.findViewById(R.id.content_container);
- Drawable icon = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode));
+ Drawable icon = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode));
String title = mode.toHumanString();
View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java
index 54bc3469be..12eff78327 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/RouteBetweenPointsBottomSheetDialogFragment.java
@@ -117,7 +117,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha
for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(i);
if (!"public_transport".equals(mode.getRoutingProfile())) {
- icon = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode));
+ icon = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode));
addProfileView(navigationType, onClickListener, i, icon, mode.toHumanString(), mode.equals(appMode));
}
}
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java
index b18592edb8..d482299931 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java
@@ -403,7 +403,7 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo
if (MeasurementEditingContext.DEFAULT_APP_MODE.equals(routeAppMode)) {
icon = getContentIcon(R.drawable.ic_action_split_interval);
} else {
- icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode));
+ icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode));
}
return icon;
}
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SnapToRoadBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SnapToRoadBottomSheetDialogFragment.java
index 35f3bc47cd..082633a854 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/SnapToRoadBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/SnapToRoadBottomSheetDialogFragment.java
@@ -106,7 +106,7 @@ public class SnapToRoadBottomSheetDialogFragment extends BottomSheetDialogFragme
for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(i);
- Drawable icon = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColorInfo().getColor(nightMode));
+ Drawable icon = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getProfileColor(nightMode));
addProfileView(container, onClickListener, i, icon, mode.toHumanString());
}
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
index a3d2b78bd5..2799ac8ded 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
@@ -560,7 +560,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
ApplicationMode appMode = app.getSettings().getApplicationMode();
int textColorPrimary = ContextCompat.getColor(app, nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light);
int textColorSecondary = ContextCompat.getColor(app, nightMode ? R.color.text_color_secondary_dark : R.color.text_color_secondary_light);
- int selectedModeColor = ContextCompat.getColor(uiCtx, appMode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = appMode.getProfileColor(nightMode);
LinearLayout ll = new LinearLayout(uiCtx);
final int dp24 = AndroidUtils.dpToPx(uiCtx, 24f);
final int dp8 = AndroidUtils.dpToPx(uiCtx, 8f);
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
index 640d01e4c9..bbaf9295f7 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/TripRecordingBottomSheet.java
@@ -116,8 +116,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
container = itemView.findViewById(R.id.always_ask_and_range_slider_container);
RangeSlider intervalSlider = itemView.findViewById(R.id.interval_slider);
intervalSlider.setValueTo(secondsLength + minutesLength - 1);
- int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode);
- int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
+ int currentModeColor = app.getSettings().getApplicationMode().getProfileColor(nightMode);
UiUtilities.setupSlider(intervalSlider, nightMode, currentModeColor, true);
container.setVisibility(View.GONE);
intervalSlider.addOnChangeListener(new RangeSlider.OnChangeListener() {
diff --git a/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java
index 1e8efe343b..674ee76042 100644
--- a/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java
@@ -121,7 +121,7 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
final ApplicationMode mode = app.getSettings().getApplicationMode();
final BottomSheetItemWithCompoundButton[] showOnMapItem = new BottomSheetItemWithCompoundButton[1];
showOnMapItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(mode.getIconColorInfo().getColor(nightMode))
+ .setCompoundButtonColor(mode.getProfileColor(nightMode))
.setChecked(checked)
.setTitle(getString(R.string.shared_string_show_on_map))
.setCustomView(getCustomButtonView(app, mode, checked, nightMode))
diff --git a/OsmAnd/src/net/osmand/plus/onlinerouting/ui/OnlineRoutingCard.java b/OsmAnd/src/net/osmand/plus/onlinerouting/ui/OnlineRoutingCard.java
index 39951b4c2c..1a2be2b134 100644
--- a/OsmAnd/src/net/osmand/plus/onlinerouting/ui/OnlineRoutingCard.java
+++ b/OsmAnd/src/net/osmand/plus/onlinerouting/ui/OnlineRoutingCard.java
@@ -78,7 +78,7 @@ public class OnlineRoutingCard extends BaseCard {
bottomDivider = view.findViewById(R.id.bottom_divider);
button = view.findViewById(R.id.button);
- int activeColor = ContextCompat.getColor(app, appMode.getIconColorInfo().getColor(nightMode));
+ int activeColor = appMode.getProfileColor(nightMode);
textFieldBoxes.setPrimaryColor(activeColor);
textFieldBoxes.setGravityFloatingLabel(Gravity.START);
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java
index 4f25b58761..731129e915 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmEditingPlugin.java
@@ -324,7 +324,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
.setTitleId(R.string.layer_osm_bugs, mapActivity)
.setSelected(settings.SHOW_OSM_BUGS.get())
.setIcon(R.drawable.ic_action_osm_note)
- .setColor(settings.SHOW_OSM_BUGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, settings.SHOW_OSM_BUGS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(new ContextMenuAdapter.OnRowItemClick() {
@@ -343,7 +343,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
if (itemId == R.string.layer_osm_bugs) {
OsmandPreference showOsmBugs = settings.SHOW_OSM_BUGS;
showOsmBugs.set(isChecked);
- adapter.getItem(pos).setColorRes(showOsmBugs.get() ?
+ adapter.getItem(pos).setColor(app, showOsmBugs.get() ?
R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
updateLayers(mapActivity.getMapView(), mapActivity);
@@ -359,14 +359,14 @@ public class OsmEditingPlugin extends OsmandPlugin {
.setTitleId(R.string.layer_osm_edits, mapActivity)
.setSelected(settings.SHOW_OSM_EDITS.get())
.setIcon(R.drawable.ic_action_openstreetmap_logo)
- .setColor(settings.SHOW_OSM_EDITS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, settings.SHOW_OSM_EDITS.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setListener(new ContextMenuAdapter.OnRowItemClick() {
@Override
public boolean onContextMenuClick(ArrayAdapter adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
if (itemId == R.string.layer_osm_edits) {
OsmandPreference showOsmEdits = settings.SHOW_OSM_EDITS;
showOsmEdits.set(isChecked);
- adapter.getItem(pos).setColorRes(showOsmEdits.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ adapter.getItem(pos).setColor(app, showOsmEdits.get() ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
updateLayers(mapActivity.getMapView(), mapActivity);
}
@@ -404,7 +404,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
final AvailableGPXFragment f = ((AvailableGPXFragment) fragment);
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_upload_gpx, activity)
.setIcon(R.drawable.ic_action_export)
- .setColor(R.color.color_white)
+ .setColor(app, R.color.color_white)
.setListener(new ItemClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java b/OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java
index 3c7c387a36..f521eba6b1 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/OsmNotesMenu.java
@@ -46,7 +46,7 @@ public class OsmNotesMenu {
final boolean nightMode = isNightMode(app);
final int themeRes = getThemeRes(app);
- final int selectedModeColor = ContextCompat.getColor(app, settings.getApplicationMode().getIconColorInfo().getColor(nightMode));
+ final int selectedModeColor = settings.getApplicationMode().getProfileColor(nightMode);
final int osmNotesStringId = R.string.layer_osm_bugs;
final int showZoomLevelStringId = R.string.show_from_zoom_level;
@@ -110,7 +110,7 @@ public class OsmNotesMenu {
.setTitleId(osmNotesStringId, mapActivity)
.setDescription(mapActivity.getString(R.string.switch_osm_notes_visibility_desc))
.setIcon(R.drawable.ic_action_osm_note)
- .setColor(toggleIconColorId)
+ .setColor(app, toggleIconColorId)
.setListener(l)
.setSelected(showOsmBugs)
.createItem());
diff --git a/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java b/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java
index 8ddd677be2..55d8d350e1 100644
--- a/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java
+++ b/OsmAnd/src/net/osmand/plus/poi/RearrangePoiFiltersFragment.java
@@ -310,13 +310,12 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
ImageView profileIcon = (ImageView) view.findViewById(R.id.profile_icon);
if (profileIcon != null) {
int iconRes = selectedAppMode.getIconRes();
- int iconColor = selectedAppMode.getIconColorInfo().getColor(nightMode);
- profileIcon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, iconColor));
+ profileIcon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, selectedAppMode.getProfileColor(nightMode)));
}
View profileButton = view.findViewById(R.id.profile_button);
if (profileButton != null) {
- int iconColor = getSelectedAppMode().getIconColorInfo().getColor(nightMode);
+ int iconColor = getSelectedAppMode().getProfileColor(nightMode);
int bgColor = ContextCompat.getColor(app, nightMode ?
R.color.divider_color_dark : R.color.active_buttons_and_links_text_light);
int selectedColor = UiUtilities.getColorWithAlpha(iconColor, 0.3f);
diff --git a/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java
index 58f1c721ab..6107476426 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java
@@ -67,7 +67,7 @@ public class AppProfileArrayAdapter extends ArrayAdapter {
Drawable iconDrawable;
boolean lightContent = app.getSettings().isLightContent();
if (mode.isSelected()) {
- iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColor(!lightContent));
+ iconDrawable = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getIconColor(!lightContent));
} else {
iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), lightContent);
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java
index a2e024f860..6a92563647 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java
@@ -6,10 +6,12 @@ import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper;
+import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
import net.osmand.PlatformUtil;
@@ -35,8 +37,8 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter getItems() {
@@ -137,9 +140,9 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter() {
@@ -274,8 +275,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
private boolean deleted;
private boolean customProfile;
- EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, boolean customProfile, boolean deleted, ProfileIconColors iconColor, int order) {
- super(name, descr, stringKey, iconRes, isSelected, iconColor);
+ EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected,
+ boolean customProfile, boolean deleted, @ColorInt int iconColorLight, @ColorInt int iconColorDark, int order) {
+ super(name, descr, stringKey, iconRes, isSelected, iconColorLight, iconColorDark);
this.customProfile = customProfile;
this.deleted = deleted;
this.order = order;
@@ -365,10 +367,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
if (iconRes == 0 || iconRes == -1) {
iconRes = R.drawable.ic_action_world_globe;
}
- int profileColorResId = mode.getIconColor(nightMode);
- int colorNoAlpha = ContextCompat.getColor(app, profileColorResId);
+ int colorNoAlpha = mode.getIconColor(nightMode);
- profileViewHolder.icon.setImageDrawable(uiUtilities.getIcon(iconRes, profileColorResId));
+ profileViewHolder.icon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, colorNoAlpha));
//set up cell color
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
diff --git a/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java
index fd0f593462..ea513b405c 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java
@@ -12,7 +12,7 @@ public class OnlineRoutingEngineDataObject extends ProfileDataObject {
String description,
String stringKey,
int order) {
- super(name, description, stringKey, R.drawable.ic_world_globe_dark, false, null);
+ super(name, description, stringKey, R.drawable.ic_world_globe_dark, false, null, null);
this.order = order;
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java
index 35b5be5620..048c7693d1 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java
@@ -1,5 +1,6 @@
package net.osmand.plus.profiles;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.NonNull;
@@ -12,15 +13,20 @@ public class ProfileDataObject implements Comparable {
private String stringKey;
private boolean isSelected;
private boolean isEnabled;
- private ProfileIconColors iconColor;
+ @ColorInt
+ private Integer iconColorLight;
+ @ColorInt
+ private Integer iconColorDark;
- public ProfileDataObject(String name, String description, String stringKey, int iconRes, boolean isSelected, ProfileIconColors iconColor) {
+ public ProfileDataObject(String name, String description, String stringKey, int iconRes, boolean isSelected,
+ @ColorInt Integer iconColorLight, @ColorInt Integer iconColorDark) {
this.name = name;
this.iconRes = iconRes;
this.description = description;
this.isSelected = isSelected;
this.stringKey = stringKey;
- this.iconColor = iconColor;
+ this.iconColorLight = iconColorLight;
+ this.iconColorDark = iconColorDark;
}
public String getName() {
@@ -55,8 +61,9 @@ public class ProfileDataObject implements Comparable {
return stringKey;
}
- @ColorRes public int getIconColor(boolean isNightMode) {
- return iconColor.getColor(isNightMode);
+ @ColorInt
+ public int getIconColor(boolean isNightMode) {
+ return isNightMode ? iconColorDark : iconColorLight;
}
@Override
diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
index 6306dee9cc..bc939546cf 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java
@@ -33,7 +33,7 @@ public class ProfileDataUtils {
description = getAppModeDescription(app, mode);
}
profiles.add(new ProfileDataObject(mode.toHumanString(), description,
- mode.getStringKey(), mode.getIconRes(), false, mode.getIconColorInfo()));
+ mode.getStringKey(), mode.getIconRes(), false, mode.getProfileColor(false), mode.getProfileColor(true)));
}
return profiles;
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java
index 3fd97cc523..e7bccfde64 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java
@@ -31,6 +31,7 @@ public enum ProfileIconColors {
return name;
}
+ @ColorRes
public int getColor(boolean nightMode) {
return nightMode ? nightColor : dayColor;
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java
index ab808de360..43c3b80953 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java
@@ -11,7 +11,7 @@ public class RoutingProfileDataObject extends ProfileDataObject {
private String fileName;
public RoutingProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, String fileName) {
- super(name, descr, stringKey, iconRes, isSelected, null);
+ super(name, descr, stringKey, iconRes, isSelected, null, null);
this.fileName = fileName;
}
diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectCopyProfilesMenuAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/SelectCopyProfilesMenuAdapter.java
index efe1b00a2e..53dbef23bd 100644
--- a/OsmAnd/src/net/osmand/plus/profiles/SelectCopyProfilesMenuAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/profiles/SelectCopyProfilesMenuAdapter.java
@@ -67,10 +67,9 @@ public class SelectCopyProfilesMenuAdapter extends AbstractProfileMenuAdapter {
private static final Log LOG = PlatformUtil.getLog(SelectProfileMenuAdapter.class);
@@ -33,8 +33,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter items = new ArrayList<>();
private final OsmandApplication app;
private ApplicationMode appMode;
- @ColorRes
- private int selectedIconColorRes;
+ @ColorInt
+ private int selectedIconColor;
private boolean bottomButton;
private String bottomButtonText;
private static final String BUTTON_ITEM = "button_item";
@@ -53,9 +53,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter getItems() {
@@ -100,11 +99,10 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter extends QuickAction {
OsmandApplication app = (OsmandApplication) context.getApplicationContext();
- Drawable icon = app.getUIUtilities().getIcon(
- getItemIconRes(app, item), getItemIconColorRes(app, item));
+ Drawable icon = app.getUIUtilities().getPaintedIcon(
+ getItemIconRes(app, item), getItemIconColor(app, item));
holder.icon.setImageDrawable(icon);
holder.title.setText(getItemName(context, item));
@@ -310,10 +312,11 @@ public abstract class SwitchableAction extends QuickAction {
return R.drawable.ic_map;
}
- @ColorRes
- protected int getItemIconColorRes(OsmandApplication app, T item) {
+ @ColorInt
+ protected int getItemIconColor(OsmandApplication app, T item) {
boolean nightMode = !app.getSettings().isLightContent();
- return nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light;
+ int colorRes = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light;
+ return ContextCompat.getColor(app, colorRes);
}
protected abstract
diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java
index 4c2d452e64..51b9b300ed 100644
--- a/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java
+++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/ShowHidePoiAction.java
@@ -353,7 +353,6 @@ public class ShowHidePoiAction extends QuickAction {
builder.setIcon(R.drawable.mx_user_defined);
}
- builder.setColor(ContextMenuItem.INVALID_ID);
builder.setSkipPaintingWithoutColor(true);
adapter.addItem(builder.createItem());
}
diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java
index 3710f9832b..da31b61466 100644
--- a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java
+++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java
@@ -5,6 +5,7 @@ import android.text.TextUtils;
import android.view.View;
import android.widget.Toast;
+import androidx.annotation.ColorInt;
import androidx.appcompat.widget.SwitchCompat;
import com.google.gson.Gson;
@@ -182,13 +183,14 @@ public class SwitchProfileAction extends SwitchableAction {
}
@Override
- protected int getItemIconColorRes(OsmandApplication app, String item) {
+ @ColorInt
+ protected int getItemIconColor(OsmandApplication app, String item) {
ApplicationMode appMode = getModeForKey(item);
if (appMode != null) {
boolean nightMode = !app.getSettings().isLightContent();
- return appMode.getIconColorInfo().getColor(nightMode);
+ return appMode.getProfileColor(nightMode);
}
- return super.getItemIconColorRes(app, item);
+ return super.getItemIconColor(app, item);
}
@Override
diff --git a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java
index 59ba2dadf7..b43171e632 100644
--- a/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/rastermaps/OsmandRasterMapsPlugin.java
@@ -13,7 +13,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
-import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -325,7 +324,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
: mapActivity.getString(R.string.shared_string_none);
item.setDescription(overlayMapDescr);
item.setSelected(hasOverlayDescription);
- item.setColorRes(hasOverlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, hasOverlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
}
@@ -350,7 +349,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
item.setDescription(underlayMapDescr);
item.setSelected(hasUnderlayDescription);
- item.setColorRes(hasUnderlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, hasUnderlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
@@ -383,7 +382,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
.setId(OVERLAY_MAP)
.setDescription(overlayMapDescr)
.setSelected(hasOverlayDescription)
- .setColor(hasOverlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, hasOverlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_layer_top)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener)
@@ -399,7 +398,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
.setId(UNDERLAY_MAP)
.setDescription(underlayMapDescr)
.setSelected(hasUnderlayDescription)
- .setColor(hasUnderlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, hasUnderlayDescription ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_layer_bottom)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener)
@@ -485,7 +484,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
final boolean[] selected = new boolean[downloaded.size()];
boolean nightMode = isNightMode(activity);
int themeResId = getThemeRes(activity);
- int selectedProfileColor = ContextCompat.getColor(app, app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode));
+ int selectedProfileColor = app.getSettings().getApplicationMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createMultiChoiceAdapter(names, nightMode, selected, app,
selectedProfileColor, themeResId, new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java
index 38f6053887..41147171c5 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java
@@ -11,6 +11,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -64,8 +65,8 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
private List compoundButtons = new ArrayList<>();
private boolean hideImpassableRoads;
- @ColorRes
- private int compoundButtonColorId = INVALID_ID;
+ @ColorInt
+ private Integer compoundButtonColor = null;
private ApplicationMode appMode;
public void setHideImpassableRoads(boolean hideImpassableRoads) {
@@ -236,7 +237,7 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(compoundButtonColorId)
+ .setCompoundButtonColor(compoundButtonColor)
.setChecked(selected)
.setTitle(parameterName)
.setLayoutId(R.layout.bottom_sheet_item_with_switch_no_icon)
@@ -254,8 +255,8 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
}
}
- public void setCompoundButtonColorId(@ColorRes int compoundButtonColorId) {
- this.compoundButtonColorId = compoundButtonColorId;
+ public void setCompoundButtonColor(@ColorInt int compoundButtonColor) {
+ this.compoundButtonColor = compoundButtonColor;
}
@Override
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java
index 8ba86dfe35..25c158a042 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java
@@ -11,6 +11,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes;
import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
@@ -84,8 +85,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private RoutingHelper routingHelper;
private RoutingOptionsHelper routingOptionsHelper;
private ApplicationMode applicationMode;
- @ColorRes
- private int selectedModeColorId;
+ @ColorInt
+ private int selectedModeColor;
private boolean currentMuteState;
private boolean currentUseHeightState;
private MapActivity mapActivity;
@@ -149,7 +150,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
if (dialogMode == null) {
dialogMode = DialogMode.DIRECTIONS;
}
- selectedModeColorId = applicationMode.getIconColorInfo().getColor(nightMode);
+ selectedModeColor = applicationMode.getProfileColor(nightMode);
voiceMuteChangeListener = new StateChangedListener() {
@Override
public void stateChanged(Boolean change) {
@@ -271,7 +272,6 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createMuteSoundItem(final LocalRoutingParameter optionsItem) {
boolean active = !routingHelper.getVoiceRouter().isMuteForMode(applicationMode);
- int selectedModeColor = ContextCompat.getColor(app, selectedModeColorId);
final View itemView = UiUtilities.getInflater(app, nightMode).inflate(
R.layout.bottom_sheet_item_with_descr_switch_and_additional_button_56dp, null, false);
final ImageView icon = itemView.findViewById(R.id.icon);
@@ -310,7 +310,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
Drawable drawable = app.getUIUtilities().getIcon(R.drawable.ic_action_settings,
nightMode ? R.color.route_info_control_icon_color_dark : R.color.route_info_control_icon_color_light);
if (Build.VERSION.SDK_INT >= 21) {
- Drawable activeDrawable = app.getUIUtilities().getIcon(R.drawable.ic_action_settings, selectedModeColorId);
+ Drawable activeDrawable = app.getUIUtilities().getPaintedIcon(R.drawable.ic_action_settings, selectedModeColor);
drawable = AndroidUtils.createPressedStateListDrawable(drawable, activeDrawable);
}
voicePromptsBtnImage.setImageDrawable(drawable);
@@ -358,7 +358,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(!active)
- .setCompoundButtonColorId(selectedModeColorId)
+ .setCompoundButtonColor(selectedModeColor)
.setDescription(getElevationDescription(parameter))
.setIcon(getContentIcon(active ? parameter.getActiveIconId() : parameter.getDisabledIconId()))
.setTitle(getString(R.string.routing_attr_height_obstacles_name))
@@ -387,7 +387,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createTimeConditionalRoutingItem(final LocalRoutingParameter optionsItem) {
final BottomSheetItemWithCompoundButton[] timeConditionalRoutingItem = new BottomSheetItemWithCompoundButton[1];
timeConditionalRoutingItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(selectedModeColorId)
+ .setCompoundButtonColor(selectedModeColor)
.setChecked(settings.ENABLE_TIME_CONDITIONAL_ROUTING.getModeValue(applicationMode))
.setIcon(getContentIcon((optionsItem.getActiveIconId())))
.setTitle(getString(R.string.temporary_conditional_routing))
@@ -433,7 +433,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createRouteSimulationItem(final LocalRoutingParameter optionsItem) {
final BottomSheetItemWithCompoundButton[] simulateNavigationItem = new BottomSheetItemWithCompoundButton[1];
simulateNavigationItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(selectedModeColorId)
+ .setCompoundButtonColor(selectedModeColor)
.setChecked(settings.simulateNavigation)
.setIcon(getContentIcon(R.drawable.ic_action_start_navigation))
.setTitle(getString(R.string.simulate_navigation))
@@ -470,7 +470,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
routingOptionsHelper.addNewRouteMenuParameter(applicationMode, optionsItem);
AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment();
avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE);
- avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId);
+ avoidRoadsFragment.setCompoundButtonColor(selectedModeColor);
avoidRoadsFragment.setApplicationMode(applicationMode);
avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG);
updateMenu();
@@ -492,7 +492,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment();
avoidRoadsFragment.setHideImpassableRoads(true);
avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE);
- avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId);
+ avoidRoadsFragment.setCompoundButtonColor(selectedModeColor);
avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG);
updateMenu();
}
@@ -565,7 +565,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
if (parameter != null) {
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
BottomSheetItemWithCompoundButton.Builder builder = new BottomSheetItemWithCompoundButton.Builder();
- builder.setCompoundButtonColorId(selectedModeColorId);
+ builder.setCompoundButtonColor(selectedModeColor);
int iconId = -1;
if (parameter.routingParameter != null || parameter instanceof RoutingOptionsHelper.OtherLocalRoutingParameter) {
builder.setTitle(parameter.getText(mapActivity));
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java
index 72e985c353..165ca20944 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RoutingOptionsHelper.java
@@ -153,7 +153,7 @@ public class RoutingOptionsHelper {
Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode);
int themeRes = getThemeRes(app);
ApplicationMode selectedAppMode = app.getRoutingHelper().getAppMode();
- int selectedModeColor = ContextCompat.getColor(app, selectedAppMode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = selectedAppMode.getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
entries, nightMode, selected, app, selectedModeColor, themeRes, new View.OnClickListener() {
@Override
@@ -334,7 +334,7 @@ public class RoutingOptionsHelper {
final boolean nightMode = isNightMode(app);
Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode);
ApplicationMode selectedAppMode = app.getRoutingHelper().getAppMode();
- final int selectedModeColor = ContextCompat.getColor(app, selectedAppMode.getIconColorInfo().getColor(nightMode));
+ final int selectedModeColor = selectedAppMode.getProfileColor(nightMode);
AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
final int layout = R.layout.list_menu_item_native_singlechoice;
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java
index 7272b7a2ea..48707d7713 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ShowAlongTheRouteBottomSheet.java
@@ -356,7 +356,7 @@ public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment
}
}
});
- int selectedProfileColor = ContextCompat.getColor(app, getAppMode().getIconColorInfo().getColor(isNightMode(app)));
+ int selectedProfileColor = getAppMode().getProfileColor(isNightMode(app));
UiUtilities.setupCompoundButton(nightMode, selectedProfileColor, compoundButton);
convertView.setOnClickListener(new View.OnClickListener() {
@@ -516,7 +516,7 @@ public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment
selected = i;
}
}
- int selectedProfileColor = ContextCompat.getColor(app, getAppMode().getIconColorInfo().getColor(nightMode));
+ int selectedProfileColor = getAppMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
names, nightMode, selected, app, selectedProfileColor, themeRes, new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
index 29a50aae4b..f707f82f88 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java
@@ -1,6 +1,8 @@
package net.osmand.plus.settings.backend;
+import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
+import androidx.core.content.ContextCompat;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@@ -469,6 +471,15 @@ public class ApplicationMode {
return app.getSettings().LOCATION_ICON.getModeValue(this);
}
+ @ColorInt
+ public int getProfileColor(boolean nightMode) {
+ Integer customProfileColor = getCustomIconColor();
+ if (customProfileColor != null) {
+ return customProfileColor;
+ }
+ return ContextCompat.getColor(app, getIconColorInfo().getColor(nightMode));
+ }
+
public void setLocationIcon(LocationIcon locationIcon) {
if (locationIcon != null) {
app.getSettings().LOCATION_ICON.setModeValue(this, locationIcon);
@@ -485,6 +496,28 @@ public class ApplicationMode {
}
}
+ public List getCustomIconColors() {
+ return app.getSettings().CUSTOM_ICON_COLORS.getStringsListForProfile(this);
+ }
+
+ public void setCustomIconColors(List customColors) {
+ app.getSettings().CUSTOM_ICON_COLORS.setModeValues(this, customColors);
+ }
+
+ public Integer getCustomIconColor() {
+ try {
+ String customColor = app.getSettings().CUSTOM_ICON_COLOR.getModeValue(this);
+ return Algorithms.isEmpty(customColor) ? null : Algorithms.parseColor(customColor);
+ } catch (IllegalArgumentException e) {
+ return null;
+ }
+ }
+
+ public void setCustomIconColor(Integer customIconColor) {
+ String valueToSave = customIconColor == null ? null : Algorithms.colorToString(customIconColor);
+ app.getSettings().CUSTOM_ICON_COLOR.setModeValue(this, valueToSave);
+ }
+
public int getOrder() {
return app.getSettings().APP_MODE_ORDER.getModeValue(this);
}
@@ -582,6 +615,7 @@ public class ApplicationMode {
mode.setRoutingProfile(builder.routingProfile);
mode.setRouteService(builder.routeService);
mode.setIconColor(builder.iconColor);
+ mode.setCustomIconColor(builder.customIconColor);
mode.setLocationIcon(builder.locationIcon);
mode.setNavigationIcon(builder.navigationIcon);
mode.setOrder(builder.order);
@@ -604,6 +638,7 @@ public class ApplicationMode {
builder.setUserProfileName(modeBean.userProfileName);
builder.setIconResName(modeBean.iconName);
builder.setIconColor(modeBean.iconColor);
+ builder.setCustomIconColor(modeBean.customIconColor);
builder.setRoutingProfile(modeBean.routingProfile);
builder.setRouteService(modeBean.routeService);
builder.setLocationIcon(modeBean.locIcon);
@@ -623,6 +658,7 @@ public class ApplicationMode {
mb.stringKey = stringKey;
mb.userProfileName = getUserProfileName();
mb.iconColor = getIconColorInfo();
+ mb.customIconColor = getCustomIconColor();
mb.iconName = getIconName();
mb.parent = parentAppMode != null ? parentAppMode.getStringKey() : null;
mb.routeService = getRouteService();
@@ -699,6 +735,7 @@ public class ApplicationMode {
private String routingProfile;
private String iconResName;
private ProfileIconColors iconColor;
+ private Integer customIconColor;
private LocationIcon locationIcon;
private NavigationIcon navigationIcon;
private int order = -1;
@@ -722,6 +759,7 @@ public class ApplicationMode {
applicationMode.setRouteService(routeService);
applicationMode.setRoutingProfile(routingProfile);
applicationMode.setIconResName(iconResName);
+ applicationMode.setCustomIconColor(customIconColor);
applicationMode.setIconColor(iconColor);
applicationMode.setLocationIcon(locationIcon);
applicationMode.setNavigationIcon(navigationIcon);
@@ -770,6 +808,11 @@ public class ApplicationMode {
return this;
}
+ public ApplicationModeBuilder setCustomIconColor(Integer customIconColor) {
+ this.customIconColor = customIconColor;
+ return this;
+ }
+
public ApplicationModeBuilder setOrder(int order) {
this.order = order;
return this;
@@ -798,6 +841,8 @@ public class ApplicationMode {
@Expose
public ProfileIconColors iconColor = ProfileIconColors.DEFAULT;
@Expose
+ public Integer customIconColor = null;
+ @Expose
public String routingProfile = null;
@Expose
public RouteService routeService = RouteService.OSMAND;
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
index 44831fa52c..2854520bbf 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java
@@ -983,6 +983,10 @@ public class OsmandSettings {
public final CommonPreference ICON_COLOR = new EnumStringPreference<>(this,
"app_mode_icon_color", ProfileIconColors.DEFAULT, ProfileIconColors.values()).makeProfile().cache();
+ public final ListStringPreference CUSTOM_ICON_COLORS = (ListStringPreference) new ListStringPreference(this, "custom_icon_colors", null, ",").makeProfile().cache();
+
+ public final CommonPreference CUSTOM_ICON_COLOR = new StringPreference(this, "custom_icon_color", null).makeProfile().cache();
+
public final CommonPreference USER_PROFILE_NAME = new StringPreference(this, "user_profile_name", "").makeProfile().cache();
public final CommonPreference PARENT_APP_MODE = new StringPreference(this, "parent_app_mode", null).makeProfile().cache();
diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java
index 88405fd010..203c0a2323 100644
--- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java
+++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java
@@ -301,6 +301,7 @@ public class ProfileSettingsItem extends OsmandSettingsItem {
OsmandSettings settings = app.getSettings();
return new String[] {
settings.ICON_COLOR.getId(),
+ settings.CUSTOM_ICON_COLOR.getId(),
settings.ICON_RES_NAME.getId(),
settings.PARENT_APP_MODE.getId(),
settings.ROUTING_PROFILE.getId(),
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/AnnouncementTimeBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/AnnouncementTimeBottomSheet.java
index 00db145474..bbec0c6211 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/AnnouncementTimeBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/AnnouncementTimeBottomSheet.java
@@ -171,7 +171,7 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
}
private void setProfileColorToSeekBar() {
- int color = ContextCompat.getColor(app, getAppMode().getIconColorInfo().getColor(nightMode));
+ int color = getAppMode().getProfileColor(nightMode);
LayerDrawable seekBarProgressLayer =
(LayerDrawable) ContextCompat.getDrawable(app, R.drawable.seekbar_progress_announcement_time);
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java
index 5eb3dd226c..6b0e2089d8 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java
@@ -103,7 +103,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
})
.create();
if (isProfileDependent()) {
- preferenceBtn[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode));
+ preferenceBtn[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode));
}
items.add(preferenceBtn[0]);
@@ -133,8 +133,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
Context themedCtx = UiUtilities.getThemedContext(app, nightMode);
View buttonView = customView.findViewById(R.id.button_container);
- int colorRes = mode.getIconColorInfo().getColor(nightMode);
- int color = checked ? ContextCompat.getColor(themedCtx, colorRes) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic);
+ int color = checked ? mode.getProfileColor(nightMode) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic);
int bgColor = UiUtilities.getColorWithAlpha(color, checked ? 0.1f : 0.5f);
int selectedColor = UiUtilities.getColorWithAlpha(color, checked ? 0.3f : 0.5f);
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java
index badfcbfb2c..25b00e338c 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java
@@ -5,6 +5,7 @@ import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
+import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -65,6 +66,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment {
private int checkedColor;
private int uncheckedColor;
private int disabledColor;
+ @ColorInt
private int appModeColor;
@Override
@@ -101,7 +103,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment {
on = getString(R.string.shared_string_enabled);
off = getString(R.string.shared_string_disabled);
- appModeColor = appMode.getIconColorInfo().getColor(nightMode);
+ appModeColor = appMode.getProfileColor(nightMode);
activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic);
disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary);
checkedColor = (nightMode ? app.getResources().getColor(R.color.text_color_primary_dark) : app.getResources().getColor(R.color.text_color_primary_light));
@@ -122,7 +124,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment {
private void createUseHeightButton(Context context) {
boolean checked = useHeightPref.getModeValue(appMode);
useHeightButton = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
- .setCompoundButtonColorId(appModeColor)
+ .setCompoundButtonColor(appModeColor)
.setChecked(checked)
.setTitle(checked ? on : off)
.setTitleColorId(checked ? activeColor : disabledColor)
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java
index 71881876b3..90b88a264d 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java
@@ -89,7 +89,7 @@ public class MultiSelectPreferencesBottomSheet extends BasePreferenceBottomSheet
.setTag(prefId)
.create();
if (isProfileDependent()) {
- item[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode));
+ item[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode));
}
items.add(item[0]);
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
index c270ea0ed8..7bde0e8034 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java
@@ -84,8 +84,7 @@ public class RecalculateRouteInDeviationBottomSheet extends BooleanPreferenceBot
entryValues = new Float[]{9.1f, 18.3f, 30.5f, 45.7f, 91.5f, 183.0f, 482.0f, 965.0f, 1609.0f};
}
- final int appModeColorId = appMode.getIconColorInfo().getColor(nightMode);
- final int appModeColor = ContextCompat.getColor(themedCtx, appModeColorId);
+ final int appModeColor = appMode.getProfileColor(nightMode);
final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic);
final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary);
@@ -108,7 +107,7 @@ public class RecalculateRouteInDeviationBottomSheet extends BooleanPreferenceBot
final BottomSheetItemWithCompoundButton[] preferenceBtn = new BottomSheetItemWithCompoundButton[1];
preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(enabled)
- .setCompoundButtonColorId(appModeColorId)
+ .setCompoundButtonColor(appModeColor)
.setTitle(enabled ? on : off)
.setTitleColorId(enabled ? activeColor : disabledColor)
.setCustomView(getCustomButtonView(app, getAppMode(), enabled, nightMode))
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java
index e9317533bc..69e225b4c0 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java
@@ -38,18 +38,17 @@ public class ResetProfilePrefsBottomSheet extends BasePreferenceBottomSheet {
String title = getString(customProfile ? R.string.restore_all_profile_settings : R.string.reset_all_profile_settings);
items.add(new TitleItem(title));
- int profileColor = mode.getIconColorInfo().getColor(nightMode);
- int colorNoAlpha = ContextCompat.getColor(ctx, profileColor);
+ int colorNoAlpha = mode.getProfileColor(nightMode);
Drawable backgroundIcon = UiUtilities.getColoredSelectableDrawable(ctx, colorNoAlpha, 0.3f);
Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.10f)), backgroundIcon};
BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder()
.setChecked(true)
- .setCompoundButtonColorId(profileColor)
- .setButtonTintList(ColorStateList.valueOf(getResolvedColor(profileColor)))
+ .setCompoundButtonColor(colorNoAlpha)
+ .setButtonTintList(ColorStateList.valueOf(colorNoAlpha))
.setDescription(ProfileDataUtils.getAppModeDescription(ctx, mode))
- .setIcon(getIcon(mode.getIconRes(), profileColor))
+ .setIcon(getPaintedIcon(mode.getIconRes(), colorNoAlpha))
.setTitle(mode.toHumanString())
.setBackground(new LayerDrawable(layers))
.setLayoutId(R.layout.preference_profile_item_with_radio_btn)
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java
index dc673207b2..2a214cdbe3 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java
@@ -6,6 +6,7 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
@@ -69,8 +70,11 @@ public class SingleSelectPreferenceBottomSheet extends BasePreferenceBottomSheet
final BaseBottomSheetItem[] preferenceItem = new BottomSheetItemWithCompoundButton[1];
preferenceItem[0] = new BottomSheetItemWithCompoundButton.Builder()
.setChecked(i == selectedEntryIndex)
- .setButtonTintList(AndroidUtils.createCheckedColorStateList(ctx, R.color.icon_color_default_light,
- isProfileDependent() ? getAppMode().getIconColorInfo().getColor(nightMode) : getActiveColorId()))
+ .setButtonTintList(AndroidUtils.createCheckedColorIntStateList(
+ ContextCompat.getColor(ctx,R.color.icon_color_default_light),
+ isProfileDependent() ?
+ getAppMode().getProfileColor(nightMode) :
+ ContextCompat.getColor(ctx, getActiveColorId())))
.setTitle(entries[i])
.setTag(i)
.setLayoutId(R.layout.bottom_sheet_item_with_radio_btn_left)
diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/WakeTimeBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/WakeTimeBottomSheet.java
index 149aa5b0a4..13dff97c94 100644
--- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/WakeTimeBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/WakeTimeBottomSheet.java
@@ -118,8 +118,7 @@ public class WakeTimeBottomSheet extends BasePreferenceBottomSheet {
}
});
- int appModeColorId = getAppMode().getIconColorInfo().getColor(nightMode);
- int appModeColor = ContextCompat.getColor(themedCtx, appModeColorId);
+ int appModeColor = getAppMode().getProfileColor(nightMode);
UiUtilities.setupSlider(slider, nightMode, appModeColor, true);
items.add(new BaseBottomSheetItem.Builder()
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java
index 63dab74fd4..e6d39cade8 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java
@@ -680,12 +680,9 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl
@ColorInt
protected int getActiveProfileColor() {
- return ContextCompat.getColor(app, getActiveProfileColorRes());
- }
-
- @ColorRes
- protected int getActiveProfileColorRes() {
- return isProfileDependent() ? getSelectedAppMode().getIconColorInfo().getColor(isNightMode()) : R.color.icon_color_active_light;
+ return isProfileDependent() ?
+ getSelectedAppMode().getProfileColor(isNightMode()) :
+ ContextCompat.getColor(app, nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light);
}
@ColorRes
@@ -801,7 +798,7 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl
protected Drawable getActiveIcon(@DrawableRes int id) {
UiUtilities cache = getIconsCache();
- return cache != null ? cache.getIcon(id, getActiveProfileColorRes()) : null;
+ return cache != null ? cache.getPaintedIcon(id, getActiveProfileColor()) : null;
}
protected Drawable getIcon(@DrawableRes int id, @ColorRes int colorId) {
@@ -829,7 +826,8 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl
Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled);
if (Build.VERSION.SDK_INT < 21) {
- ColorStateList colorStateList = AndroidUtils.createEnabledColorStateList(app, R.color.icon_color_default_light, getActiveProfileColorRes());
+ int defaultColor = ContextCompat.getColor(app, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light);
+ ColorStateList colorStateList = AndroidUtils.createEnabledColorIntStateList(defaultColor, getActiveProfileColor());
icon = DrawableCompat.wrap(icon);
DrawableCompat.setTintList(icon, colorStateList);
return icon;
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java
index 078197da4f..4b8e40f1a0 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java
@@ -6,9 +6,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
-import androidx.annotation.NonNull;
-import androidx.recyclerview.widget.RecyclerView;
-
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
@@ -33,12 +30,16 @@ import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.ApplicationMode.ApplicationModeBean;
import net.osmand.util.Algorithms;
-import org.apache.commons.logging.Log;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.logging.Log;
import java.io.File;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.recyclerview.widget.RecyclerView;
+
import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
public class DuplicatesSettingsAdapter extends RecyclerView.Adapter {
@@ -121,7 +122,10 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter colors = new ArrayList<>();
+ for (ProfileIconColors color : ProfileIconColors.values()) {
+ colors.add(ContextCompat.getColor(app, color.getColor(isNightMode())));
}
- updateProfileNameAppearance();
- updateProfileButton();
+ colorsCard = new ColorsCard(mapActivity, selectedColor, this, colors, app.getSettings().CUSTOM_ICON_COLORS, getSelectedAppMode());
+ colorsCard.setListener(this);
+ colorsCardContainer.addView(colorsCard.build(app));
+ updateColorName();
}
private void updateProfileNameAppearance() {
if (profileName != null) {
if (profileName.isFocusable() && profileName.isFocusableInTouchMode()) {
- int selectedColor = ContextCompat.getColor(app, changedProfile.color.getColor(isNightMode()));
+ int selectedColor = changedProfile.getActualColor();
profileNameOtfb.setPrimaryColor(selectedColor);
profileName.getBackground().mutate().setColorFilter(selectedColor, PorterDuff.Mode.SRC_ATOP);
}
@@ -560,8 +538,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
private View createLocationIconView(final LocationIcon locationIcon, ViewGroup rootView) {
FrameLayout locationIconView = (FrameLayout) UiUtilities.getInflater(getContext(), isNightMode())
.inflate(R.layout.preference_select_icon_button, rootView, false);
- int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor(
- app.getDaynightHelper().isNightModeForMapControls()));
+ int changedProfileColor = changedProfile.getActualColor();
LayerDrawable locationIconDrawable = (LayerDrawable) AppCompatResources.getDrawable(app, locationIcon.getIconId());
if (locationIconDrawable != null) {
DrawableCompat.setTint(DrawableCompat.wrap(locationIconDrawable.getDrawable(1)), changedProfileColor);
@@ -609,7 +586,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
LayerDrawable navigationIconDrawable = (LayerDrawable) AppCompatResources.getDrawable(app, navigationIcon.getIconId());
if (navigationIconDrawable != null) {
DrawableCompat.setTint(DrawableCompat.wrap(navigationIconDrawable.getDrawable(1)),
- ContextCompat.getColor(app, changedProfile.color.getColor(app.getDaynightHelper().isNightModeForMapControls())));
+ changedProfile.getActualColor());
}
ImageView imageView = navigationIconView.findViewById(R.id.icon);
imageView.setImageDrawable(navigationIconDrawable);
@@ -634,8 +611,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
});
ImageView outlineRect = navigationIconView.findViewById(R.id.outlineRect);
GradientDrawable rectContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.bg_select_icon_button_outline);
- int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor(
- app.getDaynightHelper().isNightModeForMapControls()));
+ int changedProfileColor = changedProfile.getActualColor();
if (rectContourDrawable != null) {
rectContourDrawable.setStroke(AndroidUtils.dpToPx(app, 2), changedProfileColor);
}
@@ -660,13 +636,13 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
}
private void setIconColor(int iconRes) {
- int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor(
- app.getDaynightHelper().isNightModeForMapControls()));
+ int changedProfileColor = changedProfile.getActualColor();
View iconItem = iconItems.findViewWithTag(iconRes);
if (iconItem != null) {
+ int newColor = changedProfile.getActualColor();
AndroidUtils.setBackground(iconItem.findViewById(R.id.background),
UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, R.drawable.circle_background_light),
- UiUtilities.getColorWithAlpha(ContextCompat.getColor(app, changedProfile.color.getColor(isNightMode())), 0.1f)));
+ UiUtilities.getColorWithAlpha(newColor, 0.1f)));
ImageView outlineCircle = iconItem.findViewById(R.id.outline);
GradientDrawable circleContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.circle_contour_bg_light);
if (circleContourDrawable != null) {
@@ -775,6 +751,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
mode.setRoutingProfile(changedProfile.routingProfile);
mode.setRouteService(changedProfile.routeService);
mode.setIconColor(changedProfile.color);
+ mode.setCustomIconColor(changedProfile.customColor);
mode.setLocationIcon(changedProfile.locationIcon);
mode.setNavigationIcon(changedProfile.navigationIcon);
@@ -795,6 +772,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
.setRoutingProfile(changedProfile.routingProfile)
.setRouteService(changedProfile.routeService)
.setIconColor(changedProfile.color)
+ .setCustomIconColor(changedProfile.customColor)
.setLocationIcon(changedProfile.locationIcon)
.setNavigationIcon(changedProfile.navigationIcon);
@@ -931,6 +909,18 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
}
}
+ private void updateColorName() {
+ if (colorsCard == null || colorName == null) {
+ return;
+ }
+ int selectedColor = colorsCard.getSelectedColor();
+ if (colorsCard.isBaseColor(selectedColor)) {
+ colorName.setText(changedProfile.getProfileColorByColorValue(selectedColor).getName());
+ } else {
+ colorName.setText(R.string.custom_color);
+ }
+ }
+
@Override
public void onProfileSelected(Bundle args) {
String profileKey = args.getString(PROFILE_KEY_ARG);
@@ -938,6 +928,53 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
updateParentProfile(profileKey, imported);
}
+ @Override
+ public void onCardLayoutNeeded(@NonNull BaseCard card) {
+ }
+
+ @Override
+ public void onCardPressed(@NonNull BaseCard card) {
+ if (card instanceof ColorsCard) {
+ ColorsCard cardOfColors = (ColorsCard) card;
+ int color = cardOfColors.getSelectedColor();
+
+ if (color == changedProfile.getActualColor()) {
+ return;
+ }
+
+ if (cardOfColors.isBaseColor(color)) {
+ changedProfile.customColor = null;
+ changedProfile.color = changedProfile.getProfileColorByColorValue(color);
+ } else {
+ changedProfile.customColor = cardOfColors.getSelectedColor();
+ changedProfile.color = null;
+ }
+
+ if (iconItems != null) {
+ updateIconColor(changedProfile.iconRes);
+ }
+
+ updateColorName();
+ updateProfileNameAppearance();
+ updateProfileButton();
+ setVerticalScrollBarEnabled(false);
+ updatePreference(findPreference(MASTER_PROFILE));
+ updatePreference(findPreference(LOCATION_ICON_ITEMS));
+ updatePreference(findPreference(NAV_ICON_ITEMS));
+ setVerticalScrollBarEnabled(true);
+ }
+ }
+
+ @Override
+ public void onCardButtonPressed(@NonNull BaseCard card, int buttonIndex) {
+ }
+
+ @Override
+ public void onColorSelected(Integer prevColor, int newColor) {
+ colorsCard.onColorSelected(prevColor, newColor);
+ this.onCardPressed(colorsCard);
+ }
+
public static boolean showInstance(FragmentActivity activity, SettingsScreenType screenType, @Nullable String appMode, boolean imported) {
try {
Fragment fragment = Fragment.instantiate(activity, screenType.fragmentName);
@@ -963,12 +1000,29 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
ApplicationMode parent = null;
String name;
ProfileIconColors color;
+ Integer customColor = null;
int iconRes;
String routingProfile;
RouteProvider.RouteService routeService;
NavigationIcon navigationIcon;
LocationIcon locationIcon;
+ @ColorInt
+ public int getActualColor() {
+ return customColor != null ?
+ customColor : ContextCompat.getColor(app, color.getColor(isNightMode()));
+ }
+
+ public ProfileIconColors getProfileColorByColorValue(int colorValue) {
+ for (ProfileIconColors color : ProfileIconColors.values()) {
+ if (ContextCompat.getColor(app, color.getColor(true)) == colorValue
+ || ContextCompat.getColor(app, color.getColor(false)) == colorValue) {
+ return color;
+ }
+ }
+ return ProfileIconColors.DEFAULT;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -982,6 +1036,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
if (parent != null ? !parent.equals(that.parent) : that.parent != null) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false;
if (color != that.color) return false;
+ if (customColor != null ? !customColor.equals(that.customColor) : that.customColor != null) return false;
if (routingProfile != null ? !routingProfile.equals(that.routingProfile) : that.routingProfile != null)
return false;
if (routeService != that.routeService) return false;
@@ -995,6 +1050,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
result = 31 * result + (parent != null ? parent.hashCode() : 0);
result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (color != null ? color.hashCode() : 0);
+ result = 31 * result + (customColor != null ? customColor.hashCode() : 0);
result = 31 * result + iconRes;
result = 31 * result + (routingProfile != null ? routingProfile.hashCode() : 0);
result = 31 * result + (routeService != null ? routeService.hashCode() : 0);
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
index 4ec93b68ef..d9290bdcbe 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/RouteParametersFragment.java
@@ -443,7 +443,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP
});
builder.setNegativeButton(R.string.shared_string_cancel, null);
- int selectedModeColor = ContextCompat.getColor(app, mode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = mode.getProfileColor(nightMode);
setupAngleSlider(angleValue, sliderView, nightMode, selectedModeColor);
builder.show();
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/VehicleParametersFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/VehicleParametersFragment.java
index 7885a6700b..3972b61c20 100644
--- a/OsmAnd/src/net/osmand/plus/settings/fragments/VehicleParametersFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/fragments/VehicleParametersFragment.java
@@ -280,7 +280,7 @@ public class VehicleParametersFragment extends BaseSettingsFragment implements O
}
});
- int selectedModeColor = ContextCompat.getColor(app, mode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = mode.getProfileColor(nightMode);
if (!defaultSpeedOnly) {
setupSpeedSlider(SpeedSliderType.DEFAULT_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor);
setupSpeedSlider(SpeedSliderType.MIN_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor);
diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/ContourLinesMenu.java b/OsmAnd/src/net/osmand/plus/srtmplugin/ContourLinesMenu.java
index 86abdee880..0b4f6d831c 100644
--- a/OsmAnd/src/net/osmand/plus/srtmplugin/ContourLinesMenu.java
+++ b/OsmAnd/src/net/osmand/plus/srtmplugin/ContourLinesMenu.java
@@ -184,7 +184,7 @@ public class ContourLinesMenu {
contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(toggleActionStringId, mapActivity)
.setIcon(toggleIconId)
- .setColor(toggleIconColorId)
+ .setColor(app, toggleIconColorId)
.setListener(l)
.setSelected(selected).createItem());
if (selected) {
@@ -225,7 +225,7 @@ public class ContourLinesMenu {
.setTitleId(R.string.srtm_plugin_name, mapActivity)
.setLayout(R.layout.list_item_icon_and_right_btn)
.setIcon(R.drawable.ic_plugin_srtm)
- .setColor(R.color.osmand_orange)
+ .setColor(app, R.color.osmand_orange)
.setDescription(app.getString(R.string.shared_string_plugin))
.setListener(l).createItem());
} else {
diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java
index e58bf4ef89..bf070b158a 100644
--- a/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/srtmplugin/SRTMPlugin.java
@@ -10,7 +10,6 @@ import android.widget.ArrayAdapter;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
-import androidx.core.content.ContextCompat;
import net.osmand.AndroidUtils;
import net.osmand.data.LatLon;
@@ -303,7 +302,7 @@ public class SRTMPlugin extends OsmandPlugin {
if (item != null) {
item.setDescription(app.getString(R.string.display_zoom_level,
getPrefDescription(app, contourLinesProp, pref)));
- item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setSelected(selected);
adapter.notifyDataSetChanged();
}
@@ -322,7 +321,7 @@ public class SRTMPlugin extends OsmandPlugin {
}
ContextMenuItem item = adapter.getItem(position);
if (item != null) {
- item.setColorRes(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setSelected(selected);
adapter.notifyDataSetChanged();
}
@@ -346,7 +345,7 @@ public class SRTMPlugin extends OsmandPlugin {
.setSelected(contourLinesSelected)
.setIcon(R.drawable.ic_plugin_srtm)
.setDescription(app.getString(R.string.display_zoom_level, descr))
- .setColor(contourLinesSelected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, contourLinesSelected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setItemDeleteAction(makeDeleteAction(settings.CONTOUR_LINES_ZOOM))
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener).createItem());
@@ -360,7 +359,7 @@ public class SRTMPlugin extends OsmandPlugin {
? R.string.shared_string_hillshade
: R.string.download_slope_maps))
.setSelected(terrainEnabled)
- .setColor(terrainEnabled ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, terrainEnabled ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_action_hillshade_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setItemDeleteAction(makeDeleteAction(settings.TERRAIN, settings.TERRAIN_MODE))
@@ -473,7 +472,7 @@ public class SRTMPlugin extends OsmandPlugin {
possibleValues[j]);
}
- int selectedModeColor = ContextCompat.getColor(app, settings.getApplicationMode().getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = settings.getApplicationMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
possibleValuesString, nightMode, i, app, selectedModeColor, themeRes, new View.OnClickListener() {
diff --git a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java
index c142ebcf5c..1475a0a7fd 100644
--- a/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java
+++ b/OsmAnd/src/net/osmand/plus/srtmplugin/TerrainFragment.java
@@ -75,7 +75,6 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
private boolean nightMode;
private boolean terrainEnabled;
- private int colorProfileRes;
private int colorProfile;
private TextView downloadDescriptionTv;
@@ -144,8 +143,7 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
uiUtilities = app.getUIUtilities();
nightMode = app.getDaynightHelper().isNightModeForMapControls();
srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
- colorProfileRes = settings.getApplicationMode().getIconColorInfo().getColor(nightMode);
- colorProfile = ContextCompat.getColor(app, colorProfileRes);
+ colorProfile = settings.getApplicationMode().getProfileColor(nightMode);
terrainEnabled = srtmPlugin.isTerrainLayerEnabled();
super.onCreate(savedInstanceState);
}
@@ -238,7 +236,7 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
String transparency = transparencyValue + "%";
int minZoom = Math.max(srtmPlugin.getTerrainMinZoom(), TERRAIN_MIN_ZOOM);
int maxZoom = Math.min(srtmPlugin.getTerrainMaxZoom(), TERRAIN_MAX_ZOOM);
- iconIv.setImageDrawable(uiUtilities.getIcon(R.drawable.ic_action_hillshade_dark, colorProfileRes));
+ iconIv.setImageDrawable(uiUtilities.getPaintedIcon(R.drawable.ic_action_hillshade_dark, colorProfile));
stateTv.setText(R.string.shared_string_enabled);
transparencySlider.setValue(transparencyValue);
transparencyValueTv.setText(transparency);
diff --git a/OsmAnd/src/net/osmand/plus/track/ColorsCard.java b/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
index 9fee9408c4..5f83dfc6c8 100644
--- a/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
+++ b/OsmAnd/src/net/osmand/plus/track/ColorsCard.java
@@ -7,12 +7,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import androidx.annotation.ColorInt;
-import androidx.annotation.NonNull;
-import androidx.core.content.ContextCompat;
-import androidx.core.graphics.ColorUtils;
-import androidx.fragment.app.Fragment;
-
import com.google.android.material.internal.FlowLayout;
import net.osmand.AndroidUtils;
@@ -22,6 +16,8 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
+import net.osmand.plus.settings.backend.ApplicationMode;
+import net.osmand.plus.settings.backend.ListStringPreference;
import net.osmand.plus.track.CustomColorBottomSheet.ColorPickerListener;
import net.osmand.util.Algorithms;
@@ -30,6 +26,11 @@ import org.apache.commons.logging.Log;
import java.util.ArrayList;
import java.util.List;
+import androidx.annotation.ColorInt;
+import androidx.core.content.ContextCompat;
+import androidx.core.graphics.ColorUtils;
+import androidx.fragment.app.Fragment;
+
public class ColorsCard extends BaseCard implements ColorPickerListener {
public static final int MAX_CUSTOM_COLORS = 6;
@@ -41,6 +42,9 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
private Fragment targetFragment;
+ private ApplicationMode appMode;
+ private ListStringPreference colorsListPreference;
+
private List colors;
private List customColors;
@@ -51,12 +55,14 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return R.layout.colors_card;
}
- public ColorsCard(MapActivity mapActivity, int selectedColor, Fragment targetFragment, List colors) {
+ public ColorsCard(MapActivity mapActivity, int selectedColor, Fragment targetFragment, List colors, ListStringPreference colorsListPreference, ApplicationMode appMode) {
super(mapActivity);
this.targetFragment = targetFragment;
this.selectedColor = selectedColor;
this.colors = colors;
- customColors = getCustomColors(app);
+ this.colorsListPreference = colorsListPreference;
+ this.customColors = getCustomColors(colorsListPreference, appMode);
+ this.appMode = appMode;
}
public int getSelectedColor() {
@@ -215,9 +221,18 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return app.getUIUtilities().getPaintedIcon(R.drawable.ic_bg_transparency, transparencyColor);
}
- public static List getCustomColors(@NonNull OsmandApplication app) {
+ public static List getCustomColors(ListStringPreference colorsListPreference) {
+ return getCustomColors(colorsListPreference, null);
+ }
+
+ public static List getCustomColors(ListStringPreference colorsListPreference, ApplicationMode appMode) {
List colors = new ArrayList<>();
- List colorNames = app.getSettings().CUSTOM_TRACK_COLORS.getStringsList();
+ List colorNames;
+ if (appMode == null) {
+ colorNames = colorsListPreference.getStringsList();
+ } else {
+ colorNames = colorsListPreference.getStringsListForProfile(appMode);
+ }
if (colorNames != null) {
for (String colorHex : colorNames) {
try {
@@ -233,12 +248,24 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return colors;
}
+ public int getIndexOfSelectedColor() {
+ return customColors.indexOf(selectedColor);
+ }
+
+ public boolean isBaseColor(int color) {
+ return colors.contains(color);
+ }
+
private void saveCustomColors() {
List colorNames = new ArrayList<>();
for (Integer color : customColors) {
String colorHex = Algorithms.colorToString(color);
colorNames.add(colorHex);
}
- app.getSettings().CUSTOM_TRACK_COLORS.setStringsList(colorNames);
+ if (appMode == null) {
+ colorsListPreference.setStringsList(colorNames);
+ } else {
+ colorsListPreference.setStringsListForProfile(appMode, colorNames);
+ }
}
}
\ No newline at end of file
diff --git a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
index f586700ef2..4642175b09 100644
--- a/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
+++ b/OsmAnd/src/net/osmand/plus/track/TrackAppearanceFragment.java
@@ -360,7 +360,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
@Override
public void onColorSelected(Integer prevColor, int newColor) {
if (prevColor != null) {
- List customColors = ColorsCard.getCustomColors(app);
+ List customColors = ColorsCard.getCustomColors(app.getSettings().CUSTOM_TRACK_COLORS);
int index = customColors.indexOf(prevColor);
if (index != ColorsCard.INVALID_VALUE) {
saveCustomColorsToTracks(prevColor, newColor);
@@ -670,7 +670,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
MapActivity mapActivity = getMapActivity();
if (mapActivity != null) {
List colors = getTrackColors();
- colorsCard = new ColorsCard(mapActivity, trackDrawInfo.getColor(), this, colors);
+ colorsCard = new ColorsCard(mapActivity, trackDrawInfo.getColor(), this, colors, app.getSettings().CUSTOM_TRACK_COLORS, null);
colorsCard.setListener(this);
cardsContainer.addView(colorsCard.build(mapActivity));
}
diff --git a/OsmAnd/src/net/osmand/plus/transport/TransportLinesMenu.java b/OsmAnd/src/net/osmand/plus/transport/TransportLinesMenu.java
index 4e91d5700e..5ccac24296 100644
--- a/OsmAnd/src/net/osmand/plus/transport/TransportLinesMenu.java
+++ b/OsmAnd/src/net/osmand/plus/transport/TransportLinesMenu.java
@@ -80,8 +80,7 @@ public class TransportLinesMenu {
final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
final Context themedCtx = UiUtilities.getThemedContext(mapActivity, nightMode);
- final int profileColorResId = appMode.getIconColorInfo().getColor(nightMode);
- final int profileColor = ContextCompat.getColor(themedCtx, profileColorResId);
+ final int profileColor = appMode.getProfileColor(nightMode);
final AlertDialog.Builder b = new AlertDialog.Builder(themedCtx);
b.setTitle(themedCtx.getString(R.string.rendering_category_transport));
@@ -123,7 +122,7 @@ public class TransportLinesMenu {
View v = super.getView(position, convertView, parent);
final ImageView icon = (ImageView) v.findViewById(R.id.icon);
if (checkedItems[position]) {
- icon.setImageDrawable(app.getUIUtilities().getIcon(iconIds[position], profileColorResId));
+ icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconIds[position], profileColor));
} else {
icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position]));
}
@@ -138,7 +137,7 @@ public class TransportLinesMenu {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkedItems[position] = isChecked;
if (checkedItems[position]) {
- icon.setImageDrawable(app.getUIUtilities().getIcon(iconIds[position], profileColorResId));
+ icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconIds[position], profileColor));
} else {
icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position]));
}
diff --git a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java
index 8fa3f2bf50..945796a726 100644
--- a/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/layers/MapControlsLayer.java
@@ -20,6 +20,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.content.res.AppCompatResources;
@@ -888,7 +889,7 @@ public class MapControlsLayer extends OsmandMapLayer {
compassHud.updateVisibility(!forceHideCompass && shouldShowCompass());
ApplicationMode appMode = settings.getApplicationMode();
- layersHud.setIconColorId(appMode.getIconColorInfo().getColor(isNight));
+ layersHud.setIconColor(appMode.getProfileColor(isNight));
if (layersHud.setIconResId(appMode.getIconRes())) {
layersHud.update(app, isNight);
}
@@ -1095,8 +1096,7 @@ public class MapControlsLayer extends OsmandMapLayer {
transparencyBarLayout.setVisibility(View.GONE);
}
boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
- int selectedModeColor = ContextCompat.getColor(app,
- appMode.getIconColorInfo().getColor(nightMode));
+ int selectedModeColor = appMode.getProfileColor(nightMode);
UiUtilities.setupSlider(transparencySlider, nightMode, selectedModeColor);
}
@@ -1115,6 +1115,10 @@ public class MapControlsLayer extends OsmandMapLayer {
private int resDarkId;
private int resClrLight = R.color.map_button_icon_color_light;
private int resClrDark = R.color.map_button_icon_color_dark;
+ @ColorInt
+ private Integer clrIntLight = null;
+ @ColorInt
+ private Integer clrIntDark = null;
private String id;
private boolean flipIconForRtl;
@@ -1223,11 +1227,14 @@ public class MapControlsLayer extends OsmandMapLayer {
}
public boolean resetIconColors() {
- if (resClrLight == R.color.map_button_icon_color_light && resClrDark == R.color.map_button_icon_color_dark) {
+ if (resClrLight == R.color.map_button_icon_color_light && resClrDark == R.color.map_button_icon_color_dark
+ && clrIntLight == null && clrIntDark == null) {
return false;
}
resClrLight = R.color.map_button_icon_color_light;
resClrDark = R.color.map_button_icon_color_dark;
+ clrIntLight = null;
+ clrIntDark = null;
f = true;
return true;
}
@@ -1242,6 +1249,16 @@ public class MapControlsLayer extends OsmandMapLayer {
return this;
}
+ public MapHudButton setIconColor(@ColorInt Integer clr) {
+ if (clrIntLight == clr && clrIntDark == clr) {
+ return this;
+ }
+ clrIntLight = clr;
+ clrIntDark = clr;
+ f = true;
+ return this;
+ }
+
public MapHudButton setIconsId(int icnLight, int icnDark) {
if (resLightId == icnLight && resDarkId == icnDark) {
return this;
@@ -1262,6 +1279,17 @@ public class MapControlsLayer extends OsmandMapLayer {
return this;
}
+ public MapHudButton setIconColor(@ColorInt int clrLight, @ColorInt int clrDark) {
+ if (clrIntLight == clrLight && clrIntDark == clrDark) {
+ return this;
+ }
+ clrIntLight = clrLight;
+ clrIntDark = clrDark;
+ f = true;
+ return this;
+
+ }
+
@SuppressLint("NewApi")
@SuppressWarnings("deprecation")
public void update(OsmandApplication ctx, boolean night) {
@@ -1283,7 +1311,11 @@ public class MapControlsLayer extends OsmandMapLayer {
} else if (resLightId != 0 && !nightMode) {
d = ctx.getUIUtilities().getIcon(resLightId);
} else if (resId != 0) {
- d = ctx.getUIUtilities().getIcon(resId, nightMode ? resClrDark : resClrLight);
+ if (clrIntLight != null && clrIntDark != null) {
+ d = ctx.getUIUtilities().getPaintedIcon(resId, nightMode ? clrIntDark : clrIntLight);
+ } else {
+ d = ctx.getUIUtilities().getIcon(resId, nightMode ? resClrDark : resClrLight);
+ }
if (flipIconForRtl) {
d = AndroidUtils.getDrawableForDirection(ctx, d);
}
diff --git a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java
index 16952876a8..3c60b1af49 100644
--- a/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java
+++ b/OsmAnd/src/net/osmand/plus/views/layers/PointLocationLayer.java
@@ -1,5 +1,6 @@
package net.osmand.plus.views.layers;
+import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -11,6 +12,7 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF;
import android.graphics.drawable.LayerDrawable;
+import androidx.annotation.ColorInt;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
@@ -48,7 +50,8 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
private OsmandMapTileView view;
private ApplicationMode appMode;
- private int colorId;
+ @ColorInt
+ private int color;
private LayerDrawable navigationIcon;
private int navigationIconId;
private LayerDrawable locationIcon;
@@ -160,30 +163,32 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
}
private void updateIcons(ApplicationMode appMode, boolean nighMode, boolean locationOutdated) {
- int colorId = locationOutdated ? ProfileIconColors.getOutdatedLocationColor(nighMode) : appMode.getIconColorInfo().getColor(nighMode);
+ Context ctx = view.getContext();
+ int color = locationOutdated ?
+ ContextCompat.getColor(ctx, ProfileIconColors.getOutdatedLocationColor(nighMode)) :
+ appMode.getProfileColor(nighMode);
int locationIconId = appMode.getLocationIcon().getIconId();
int navigationIconId = appMode.getNavigationIcon().getIconId();
int headingIconId = appMode.getLocationIcon().getHeadingIconId();
if (appMode != this.appMode || this.nm != nighMode || this.locationOutdated != locationOutdated
- || this.colorId != colorId
+ || this.color != color
|| this.locationIconId != locationIconId
|| this.headingIconId != headingIconId
|| this.navigationIconId != navigationIconId) {
this.appMode = appMode;
- this.colorId = colorId;
+ this.color = color;
this.nm = nighMode;
this.locationOutdated = locationOutdated;
this.locationIconId = locationIconId;
this.headingIconId = headingIconId;
this.navigationIconId = navigationIconId;
- int color = ContextCompat.getColor(view.getContext(), colorId);
- navigationIcon = (LayerDrawable) AppCompatResources.getDrawable(view.getContext(), navigationIconId);
+ navigationIcon = (LayerDrawable) AppCompatResources.getDrawable(ctx, navigationIconId);
if (navigationIcon != null) {
DrawableCompat.setTint(navigationIcon.getDrawable(1), color);
}
headingIcon = BitmapFactory.decodeResource(view.getResources(), headingIconId);
headingPaint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN));
- locationIcon = (LayerDrawable) AppCompatResources.getDrawable(view.getContext(), locationIconId);
+ locationIcon = (LayerDrawable) AppCompatResources.getDrawable(ctx, locationIconId);
if (locationIcon != null) {
DrawableCompat.setTint(DrawableCompat.wrap(locationIcon.getDrawable(1)), color);
}
diff --git a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java
index 2c9d6af19d..a64fb19f02 100644
--- a/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java
+++ b/OsmAnd/src/net/osmand/plus/views/mapwidgets/MapWidgetRegistry.java
@@ -9,7 +9,6 @@ import android.widget.LinearLayout;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
-import androidx.core.content.ContextCompat;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter;
@@ -468,7 +467,7 @@ public class MapWidgetRegistry {
.setTitleId(R.string.configure_screen_quick_action, mapActivity)
.setIcon(R.drawable.ic_quick_action)
.setSelected(selected)
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(new ContextMenuAdapter.OnRowItemClick() {
@Override
@@ -504,7 +503,7 @@ public class MapWidgetRegistry {
}
ContextMenuItem item = adapter.getItem(position);
item.setSelected(visible);
- item.setColorRes(visible ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, visible ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged();
}
@@ -522,12 +521,11 @@ public class MapWidgetRegistry {
final boolean selected = r.visibleCollapsed(mode) || r.visible(mode);
final String desc = mapActivity.getString(R.string.shared_string_collapse);
final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
- final int currentModeColorRes = mode.getIconColorInfo().getColor(nightMode);
- final int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
+ final int currentModeColor = mode.getProfileColor(nightMode);
ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder()
.setIcon(r.getDrawableMenu())
.setSelected(selected)
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setSecondaryIcon(r.widget != null ? R.drawable.ic_action_additional_option : ContextMenuItem.INVALID_ID)
.setDescription(r.visibleCollapsed(mode) ? desc : null)
.setListener(new ContextMenuAdapter.OnRowItemClick() {
@@ -557,7 +555,7 @@ public class MapWidgetRegistry {
final int id = menuItemIds[i];
boolean isChecked = id == checkedId;
String title = app.getString(titleId);
- Drawable icon = isChecked && selected ? ic.getIcon(iconId, currentModeColorRes) : ic.getThemedIcon(iconId);
+ Drawable icon = isChecked && selected ? ic.getPaintedIcon(iconId, currentModeColor) : ic.getThemedIcon(iconId);
items.add(new PopUpMenuItem.Builder(app)
.setTitle(title)
.setIcon(icon)
@@ -646,7 +644,7 @@ public class MapWidgetRegistry {
}
ContextMenuItem item = adapter.getItem(position);
item.setSelected(visible);
- item.setColorRes(visible ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
+ item.setColor(app, visible ? R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setDescription(visible && collapsed ? desc : null);
adapter.notifyDataSetChanged();
}
diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java b/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java
index 2fdf57b9be..e9534e55e4 100644
--- a/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java
+++ b/OsmAnd/src/net/osmand/plus/wikipedia/SelectWikiLanguagesBottomSheet.java
@@ -71,7 +71,7 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
public void createMenuItems(Bundle savedInstanceState) {
final int activeColorResId = nightMode ?
R.color.active_color_primary_dark : R.color.active_color_primary_light;
- final int profileColorResId = appMode.getIconColorInfo().getColor(nightMode);
+ final int profileColor = appMode.getProfileColor(nightMode);
final int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding);
final int contentPaddingSmall = app.getResources().getDimensionPixelSize(R.dimen.content_padding_small);
@@ -86,7 +86,7 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
final BottomSheetItemWithCompoundButton[] btnSelectAll = new BottomSheetItemWithCompoundButton[1];
btnSelectAll[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(this.isGlobalWikiPoiEnabled)
- .setCompoundButtonColorId(profileColorResId)
+ .setCompoundButtonColor(profileColor)
.setTitle(getString(R.string.shared_string_all_languages))
.setTitleColorId(activeColorResId)
.setCustomView(getCustomButtonView())
@@ -174,15 +174,15 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
int disableColorId = nightMode ?
R.color.active_buttons_and_links_text_disabled_dark :
R.color.active_buttons_and_links_text_disabled_light;
- int profileColorId = appMode.getIconColorInfo().getColor(nightMode);
+ int profileColor = appMode.getProfileColor(nightMode);
+ int disableColor = ContextCompat.getColor(app, disableColorId);
for (BottomSheetItemWithCompoundButton item : languageItems) {
item.getView().setEnabled(enable);
item.setTitleColorId(enable ? textColorPrimaryId : disableColorId);
CompoundButton cb = item.getCompoundButton();
if (cb != null) {
cb.setEnabled(enable);
- UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app, enable ?
- profileColorId : disableColorId), cb);
+ UiUtilities.setupCompoundButton(nightMode, enable ? profileColor : disableColor, cb);
}
}
}
@@ -254,7 +254,7 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
Drawable bgDrawable = app.getUIUtilities().getPaintedIcon(bgResId, bgColor);
AndroidUtils.setBackground(buttonView, bgDrawable);
- int selectedModeColorId = appMode.getIconColorInfo().getColor(nightMode);
+ int selectedModeColorId = appMode.getProfileColor(nightMode);
UiUtilities.setupCompoundButton(nightMode, selectedModeColorId, cb);
return buttonView;
diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPlugin.java b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPlugin.java
index 1b97f6df1c..f08f02966e 100644
--- a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPlugin.java
@@ -141,7 +141,7 @@ public class WikipediaPlugin extends OsmandPlugin {
ContextMenuItem item = adapter.getItem(pos);
if (item != null) {
item.setSelected(selected);
- item.setColorRes(selected ?
+ item.setColor(app, selected ?
R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setDescription(selected ? getLanguagesSummary() : null);
adapter.notifyDataSetChanged();
@@ -160,7 +160,7 @@ public class WikipediaPlugin extends OsmandPlugin {
.setTitleId(R.string.shared_string_wikipedia, mapActivity)
.setDescription(selected ? getLanguagesSummary() : null)
.setSelected(selected)
- .setColor(selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
+ .setColor(app, selected ? R.color.osmand_orange : ContextMenuItem.INVALID_ID)
.setIcon(R.drawable.ic_plugin_wikipedia)
.setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener).createItem());
diff --git a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java
index 28c2639a35..a2cb6b5b71 100644
--- a/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java
+++ b/OsmAnd/src/net/osmand/plus/wikipedia/WikipediaPoiMenu.java
@@ -74,7 +74,7 @@ public class WikipediaPoiMenu {
.setTitleId(toggleActionStringId, mapActivity)
.setDescription(summary)
.setIcon(toggleIconId)
- .setColor(toggleIconColorId)
+ .setColor(app, toggleIconColorId)
.setListener(l)
.setSelected(enabled).createItem());