Merge pull request #10992 from osmandapp/add_custom_profile_color

Add custom profile color
This commit is contained in:
Vitaliy 2021-03-02 00:14:41 +02:00 committed by GitHub
commit c762e072d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
89 changed files with 660 additions and 411 deletions

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<net.osmand.plus.widgets.FlowLayout
android:id="@+id/color_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp" />
</LinearLayout>

View file

@ -21,12 +21,12 @@
<PreferenceCategory <PreferenceCategory
android:key="select_color" android:key="select_color"
android:layout="@layout/preference_category_with_descr" android:layout="@layout/preference_category_with_right_text"
android:title="@string/select_color" /> android:title="@string/select_color" />
<Preference <Preference
android:key="color_items" android:key="color_items"
android:layout="@layout/preference_color_select" android:layout="@layout/preference_colors_card"
android:title="@string/select_color" android:title="@string/select_color"
android:selectable="false"/> android:selectable="false"/>

View file

@ -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) { public static StateListDrawable createCheckedStateListDrawable(Drawable normal, Drawable checked) {
return createStateListDrawable(normal, checked, android.R.attr.state_checked); return createStateListDrawable(normal, checked, android.R.attr.state_checked);
} }

View file

@ -133,7 +133,7 @@ public class ConnectedApp implements Comparable<ConnectedApp> {
CompoundButton btn = view.findViewById(R.id.toggle_item); CompoundButton btn = view.findViewById(R.id.toggle_item);
if (btn != null && btn.getVisibility() == View.VISIBLE) { if (btn != null && btn.getVisibility() == View.VISIBLE) {
btn.setChecked(!btn.isChecked()); 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(); adapter.notifyDataSetChanged();
return false; return false;
} }
@ -146,7 +146,7 @@ public class ConnectedApp implements Comparable<ConnectedApp> {
if (layersPref.set(isChecked)) { if (layersPref.set(isChecked)) {
ContextMenuItem item = adapter.getItem(position); ContextMenuItem item = adapter.getItem(position);
if (item != null) { 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); item.setSelected(isChecked);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
@ -162,7 +162,7 @@ public class ConnectedApp implements Comparable<ConnectedApp> {
.setListener(listener) .setListener(listener)
.setSelected(layersEnabled) .setSelected(layersEnabled)
.setIcon(R.drawable.ic_extension_dark) .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()); .createItem());
} }

View file

@ -249,8 +249,7 @@ public class ContextMenuAdapter {
final ContextMenuItem item = getItem(position); final ContextMenuItem item = getItem(position);
int layoutId = item.getLayout(); int layoutId = item.getLayout();
layoutId = layoutId != ContextMenuItem.INVALID_ID ? layoutId : DEFAULT_LAYOUT_ID; layoutId = layoutId != ContextMenuItem.INVALID_ID ? layoutId : DEFAULT_LAYOUT_ID;
int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode); int currentModeColor = app.getSettings().getApplicationMode().getProfileColor(nightMode);
int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
if (layoutId == R.layout.mode_toggles) { if (layoutId == R.layout.mode_toggles) {
final Set<ApplicationMode> selected = new LinkedHashSet<>(); final Set<ApplicationMode> selected = new LinkedHashSet<>();
return AppModeDialog.prepareAppModeDrawerView((Activity) getContext(), return AppModeDialog.prepareAppModeDrawerView((Activity) getContext(),
@ -278,15 +277,13 @@ public class ContextMenuAdapter {
} }
if (layoutId == R.layout.main_menu_drawer_btn_switch_profile || if (layoutId == R.layout.main_menu_drawer_btn_switch_profile ||
layoutId == R.layout.main_menu_drawer_btn_configure_profile) { layoutId == R.layout.main_menu_drawer_btn_configure_profile) {
int colorResId = item.getColorRes(); int colorNoAlpha = item.getColor();
int colorNoAlpha = ContextCompat.getColor(app, colorResId);
TextView title = convertView.findViewById(R.id.title); TextView title = convertView.findViewById(R.id.title);
title.setText(item.getTitle()); title.setText(item.getTitle());
if (layoutId == R.layout.main_menu_drawer_btn_switch_profile) { if (layoutId == R.layout.main_menu_drawer_btn_switch_profile) {
ImageView icon = convertView.findViewById(R.id.icon); 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); ImageView icArrow = convertView.findViewById(R.id.ic_expand_list);
icArrow.setImageDrawable(mIconsCache.getIcon(item.getSecondaryIcon())); icArrow.setImageDrawable(mIconsCache.getIcon(item.getSecondaryIcon()));
TextView desc = convertView.findViewById(R.id.description); TextView desc = convertView.findViewById(R.id.description);
@ -306,11 +303,8 @@ public class ContextMenuAdapter {
return convertView; return convertView;
} }
if (layoutId == R.layout.profile_list_item) { if (layoutId == R.layout.profile_list_item) {
int tag = item.getTag(); int tag = item.getTag();
int colorNoAlpha = item.getColor();
int colorResId = item.getColorRes();
int colorNoAlpha = ContextCompat.getColor(app, colorResId);
TextView title = convertView.findViewById(R.id.title); TextView title = convertView.findViewById(R.id.title);
TextView desc = convertView.findViewById(R.id.description); TextView desc = convertView.findViewById(R.id.description);
ImageView icon = convertView.findViewById(R.id.icon); ImageView icon = convertView.findViewById(R.id.icon);
@ -331,7 +325,7 @@ public class ContextMenuAdapter {
AndroidUiHelper.updateVisibility(icon, true); AndroidUiHelper.updateVisibility(icon, true);
AndroidUiHelper.updateVisibility(desc, true); AndroidUiHelper.updateVisibility(desc, true);
AndroidUtils.setTextPrimaryColor(app, title, nightMode); AndroidUtils.setTextPrimaryColor(app, title, nightMode);
icon.setImageDrawable(mIconsCache.getIcon(item.getIcon(), colorResId)); icon.setImageDrawable(mIconsCache.getPaintedIcon(item.getIcon(), colorNoAlpha));
desc.setText(item.getDescription()); desc.setText(item.getDescription());
boolean selectedMode = tag == PROFILES_CHOSEN_PROFILE_TAG; boolean selectedMode = tag == PROFILES_CHOSEN_PROFILE_TAG;
if (selectedMode) { if (selectedMode) {
@ -419,17 +413,18 @@ public class ContextMenuAdapter {
} }
} else { } else {
if (item.getIcon() != ContextMenuItem.INVALID_ID) { if (item.getIcon() != ContextMenuItem.INVALID_ID) {
int colorRes = item.getColorRes(); Integer color = item.getColor();
if (colorRes == ContextMenuItem.INVALID_ID) { Drawable drawable;
if (!item.shouldSkipPainting()) { if (color == null) {
colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark; int colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark;
} else { colorRes = item.shouldSkipPainting() ? 0 : colorRes;
colorRes = 0; drawable = mIconsCache.getIcon(item.getIcon(), colorRes);
}
} else if (profileDependent) { } 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); ((AppCompatImageView) convertView.findViewById(R.id.icon)).setImageDrawable(drawable);
convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE);
} else if (convertView.findViewById(R.id.icon) != null) { } else if (convertView.findViewById(R.id.icon) != null) {

View file

@ -19,8 +19,8 @@ public class ContextMenuItem {
private String title; private String title;
@DrawableRes @DrawableRes
private int mIcon; private int mIcon;
@ColorRes @ColorInt
private int colorRes; private Integer color;
@DrawableRes @DrawableRes
private int secondaryIcon; private int secondaryIcon;
private Boolean selected; private Boolean selected;
@ -48,7 +48,7 @@ public class ContextMenuItem {
private ContextMenuItem(@StringRes int titleId, private ContextMenuItem(@StringRes int titleId,
String title, String title,
@DrawableRes int icon, @DrawableRes int icon,
@ColorRes int colorRes, @ColorInt Integer color,
@DrawableRes int secondaryIcon, @DrawableRes int secondaryIcon,
Boolean selected, Boolean selected,
int progress, int progress,
@ -72,7 +72,7 @@ public class ContextMenuItem {
this.titleId = titleId; this.titleId = titleId;
this.title = title; this.title = title;
this.mIcon = icon; this.mIcon = icon;
this.colorRes = colorRes; this.color = color;
this.secondaryIcon = secondaryIcon; this.secondaryIcon = secondaryIcon;
this.selected = selected; this.selected = selected;
this.progress = progress; this.progress = progress;
@ -109,23 +109,17 @@ public class ContextMenuItem {
return mIcon; return mIcon;
} }
@ColorRes @ColorInt
public int getColorRes() { public Integer getColor() {
return colorRes; return color;
}
@ColorRes
public int getThemedColorRes(Context context) {
if (skipPaintingWithoutColor || getColorRes() != INVALID_ID) {
return getColorRes();
} else {
return UiUtilities.getDefaultColorRes(context);
}
} }
@ColorInt @ColorInt
public int getThemedColor(Context context) { 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 @DrawableRes
@ -212,8 +206,10 @@ public class ContextMenuItem {
this.secondaryIcon = secondaryIcon; this.secondaryIcon = secondaryIcon;
} }
public void setColorRes(int colorRes) { public void setColor(Context context, @ColorRes int colorRes) {
this.colorRes = colorRes; if (colorRes != INVALID_ID) {
this.color = ContextCompat.getColor(context, colorRes);
}
} }
public void setSelected(boolean selected) { public void setSelected(boolean selected) {
@ -268,8 +264,8 @@ public class ContextMenuItem {
private String mTitle; private String mTitle;
@DrawableRes @DrawableRes
private int mIcon = INVALID_ID; private int mIcon = INVALID_ID;
@ColorRes @ColorInt
private int mColorRes = INVALID_ID; private Integer mColor = null;
@DrawableRes @DrawableRes
private int mSecondaryIcon = INVALID_ID; private int mSecondaryIcon = INVALID_ID;
private Boolean mSelected = null; private Boolean mSelected = null;
@ -307,8 +303,15 @@ public class ContextMenuItem {
return this; return this;
} }
public ItemBuilder setColor(@ColorRes int colorRes) { public ItemBuilder setColor(@ColorInt Integer color) {
mColorRes = colorRes; mColor = color;
return this;
}
public ItemBuilder setColor(Context context, @ColorRes int colorRes) {
if (colorRes != INVALID_ID) {
mColor = ContextCompat.getColor(context, colorRes);
}
return this; return this;
} }
@ -422,7 +425,7 @@ public class ContextMenuItem {
} }
public ContextMenuItem createItem() { 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, mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor,
mOrder, mDescription, mOnUpdateCallback, mItemClickListener, mIntegerListener, mProgressListener, mOrder, mDescription, mOnUpdateCallback, mItemClickListener, mIntegerListener, mProgressListener,
mItemDeleteAction, mHideDivider, mHideCompoundButton, mMinHeight, mTag, mId); mItemDeleteAction, mHideDivider, mHideCompoundButton, mMinHeight, mTag, mId);

View file

@ -59,7 +59,7 @@ public class OsmAndLocationSimulation {
boolean nightMode = app.getDaynightHelper().isNightModeForMapControls(); boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme; int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
ApplicationMode appMode = app.getSettings().getApplicationMode(); 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)); AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(ma, themeRes));
builder.setTitle(R.string.animate_route); builder.setTitle(R.string.animate_route);

View file

@ -553,7 +553,7 @@ public class UiUtilities {
switch (type) { switch (type) {
case PROFILE_DEPENDENT: case PROFILE_DEPENDENT:
ApplicationMode appMode = app.getSettings().getApplicationMode(); ApplicationMode appMode = app.getSettings().getApplicationMode();
activeColor = ContextCompat.getColor(app, appMode.getIconColorInfo().getColor(nightMode)); activeColor = appMode.getProfileColor(nightMode);
break; break;
case TOOLBAR: case TOOLBAR:
activeColor = Color.WHITE; activeColor = Color.WHITE;

View file

@ -753,7 +753,7 @@ public class MapActivityActions implements DialogProvider {
optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item) optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item)
.setIcon(appMode.getIconRes()) .setIcon(appMode.getIconRes())
.setColor(appMode.getIconColorInfo().getColor(nightMode)) .setColor(appMode.getProfileColor(nightMode))
.setTag(tag) .setTag(tag)
.setTitle(appMode.toHumanString()) .setTitle(appMode.toHumanString())
.setDescription(modeDescription) .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; 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) optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item)
.setColor(activeColorPrimaryResId) .setColor(app, activeColorPrimaryResId)
.setTag(PROFILES_CONTROL_BUTTON_TAG) .setTag(PROFILES_CONTROL_BUTTON_TAG)
.setTitle(getString(R.string.shared_string_manage)) .setTitle(getString(R.string.shared_string_manage))
.setListener(new ItemClickListener() { .setListener(new ItemClickListener() {
@ -1083,7 +1083,7 @@ public class MapActivityActions implements DialogProvider {
.setId(DRAWER_SWITCH_PROFILE_ID) .setId(DRAWER_SWITCH_PROFILE_ID)
.setIcon(currentMode.getIconRes()) .setIcon(currentMode.getIconRes())
.setSecondaryIcon(icArrowResId) .setSecondaryIcon(icArrowResId)
.setColor(currentMode.getIconColorInfo().getColor(nightMode)) .setColor(currentMode.getProfileColor(nightMode))
.setTitle(currentMode.toHumanString()) .setTitle(currentMode.toHumanString())
.setDescription(modeDescription) .setDescription(modeDescription)
.setListener(new ItemClickListener() { .setListener(new ItemClickListener() {
@ -1097,7 +1097,7 @@ public class MapActivityActions implements DialogProvider {
.createItem()); .createItem());
optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.main_menu_drawer_btn_configure_profile) optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.main_menu_drawer_btn_configure_profile)
.setId(DRAWER_CONFIGURE_PROFILE_ID) .setId(DRAWER_CONFIGURE_PROFILE_ID)
.setColor(currentMode.getIconColorInfo().getColor(nightMode)) .setColor(currentMode.getProfileColor(nightMode))
.setTitle(getString(R.string.configure_profile)) .setTitle(getString(R.string.configure_profile))
.setListener(new ItemClickListener() { .setListener(new ItemClickListener() {
@Override @Override

View file

@ -437,7 +437,7 @@ public class MapActivityLayers {
} else { } else {
builder.setIcon(R.drawable.mx_user_defined); builder.setIcon(R.drawable.mx_user_defined);
} }
builder.setColor(ContextMenuItem.INVALID_ID); builder.setColor(activity, ContextMenuItem.INVALID_ID);
builder.setSkipPaintingWithoutColor(true); builder.setSkipPaintingWithoutColor(true);
adapter.addItem(builder.createItem()); adapter.addItem(builder.createItem());
} }
@ -495,7 +495,7 @@ public class MapActivityLayers {
OsmandApplication app = getApplication(); OsmandApplication app = getApplication();
boolean nightMode = isNightMode(app); boolean nightMode = isNightMode(app);
int themeRes = getThemeRes(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( DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
items, nightMode, selectedItem, app, selectedModeColor, themeRes, new View.OnClickListener() { items, nightMode, selectedItem, app, selectedModeColor, themeRes, new View.OnClickListener() {
@Override @Override

View file

@ -120,13 +120,13 @@ public class AppModeDialog {
final View selection = tb.findViewById(R.id.selection); final View selection = tb.findViewById(R.id.selection);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon); ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon);
if (checked) { 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))); 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); selection.setVisibility(View.VISIBLE);
} else { } else {
if (useMapTheme) { 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)); iv.setBackgroundResource(AndroidUtils.resolveAttribute(themedCtx, android.R.attr.selectableItemBackground));
} else { } else {
iv.setImageDrawable(ctx.getUIUtilities().getThemedIcon(mode.getIconRes())); iv.setImageDrawable(ctx.getUIUtilities().getThemedIcon(mode.getIconRes()));
@ -171,7 +171,7 @@ public class AppModeDialog {
final boolean checked = selected.contains(mode); final boolean checked = selected.contains(mode);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon); ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon);
ImageView selection = tb.findViewById(R.id.selection); 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) { if (checked) {
iv.setImageDrawable(drawable); iv.setImageDrawable(drawable);
iv.setContentDescription(String.format("%s %s", mode.toHumanString(), ctx.getString(R.string.item_checked))); iv.setContentDescription(String.format("%s %s", mode.toHumanString(), ctx.getString(R.string.item_checked)));
@ -184,7 +184,7 @@ public class AppModeDialog {
} else { } else {
if (useMapTheme) { if (useMapTheme) {
if (Build.VERSION.SDK_INT >= 21) { 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); drawable = AndroidUtils.createPressedStateListDrawable(drawable, active);
} }
iv.setImageDrawable(drawable); 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); AndroidUtils.setBackground(ctx, selection, nightMode, R.drawable.btn_border_pressed_trans_light, R.drawable.btn_border_pressed_trans_light);
} }
} else { } 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))); 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); int metricsY = (int) ctx.getResources().getDimension(R.dimen.route_info_modes_height);
View tb = layoutInflater.inflate(layoutId, null); View tb = layoutInflater.inflate(layoutId, null);
ImageView iv = (ImageView) tb.findViewById(R.id.app_mode_icon); 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()); iv.setContentDescription(mode.toHumanString());
// tb.setCompoundDrawablesWithIntrinsicBounds(null, ctx.getIconsCache().getIcon(mode.getIconId(), R.color.app_mode_icon_color), null, null); // tb.setCompoundDrawablesWithIntrinsicBounds(null, ctx.getIconsCache().getIcon(mode.getIconId(), R.color.app_mode_icon_color), null, null);
LayoutParams lp = new LinearLayout.LayoutParams(metricsX, metricsY); LayoutParams lp = new LinearLayout.LayoutParams(metricsX, metricsY);

View file

@ -121,7 +121,7 @@ public class StartGPSStatus extends OsmAndAction {
cb.setLayoutParams(lp); cb.setLayoutParams(lp);
cb.setPadding(dp8, 0, 0, 0); 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 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); cb.setTextColor(textColorPrimary);
UiUtilities.setupCompoundButton(isNightMode(), selectedModeColor, cb); UiUtilities.setupCompoundButton(isNightMode(), selectedModeColor, cb);

View file

@ -678,7 +678,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) { public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
if (itemId == R.string.layer_recordings) { if (itemId == R.string.layer_recordings) {
SHOW_RECORDINGS.set(!SHOW_RECORDINGS.get()); 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); R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
updateLayers(mapView, mapActivity); updateLayers(mapView, mapActivity);
@ -690,7 +690,7 @@ public class AudioVideoNotesPlugin extends OsmandPlugin {
.setId(RECORDING_LAYER) .setId(RECORDING_LAYER)
.setSelected(SHOW_RECORDINGS.get()) .setSelected(SHOW_RECORDINGS.get())
.setIcon(R.drawable.ic_action_micro_dark) .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)) .setItemDeleteAction(makeDeleteAction(SHOW_RECORDINGS))
.setListener(listener).createItem()); .setListener(listener).createItem());
} }

View file

@ -10,6 +10,7 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window; import android.view.Window;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull; 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 @Nullable
protected Drawable getContentIcon(@DrawableRes int drawableRes) { protected Drawable getContentIcon(@DrawableRes int drawableRes) {
OsmandApplication app = getMyApplication(); OsmandApplication app = getMyApplication();

View file

@ -8,6 +8,7 @@ import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.LayoutRes; import androidx.annotation.LayoutRes;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -22,6 +23,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
private ColorStateList buttonTintList; private ColorStateList buttonTintList;
private OnCheckedChangeListener onCheckedChangeListener; private OnCheckedChangeListener onCheckedChangeListener;
@ColorRes private int compoundButtonColorId; @ColorRes private int compoundButtonColorId;
@ColorInt private Integer compoundButtonColor;
private CompoundButton compoundButton; private CompoundButton compoundButton;
@ -80,6 +82,10 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
this.compoundButtonColorId = compoundButtonColorId; this.compoundButtonColorId = compoundButtonColorId;
} }
public void setCompoundButtonColor(@ColorInt int compoundButtonColor) {
this.compoundButtonColor = compoundButtonColor;
}
public CompoundButton getCompoundButton() { public CompoundButton getCompoundButton() {
return compoundButton; return compoundButton;
} }
@ -91,7 +97,9 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
if (compoundButton != null) { if (compoundButton != null) {
compoundButton.setChecked(checked); compoundButton.setChecked(checked);
compoundButton.setOnCheckedChangeListener(onCheckedChangeListener); 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); UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(context, compoundButtonColorId), compoundButton);
} else { } else {
CompoundButtonCompat.setButtonTintList(compoundButton, buttonTintList); CompoundButtonCompat.setButtonTintList(compoundButton, buttonTintList);
@ -105,6 +113,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
protected ColorStateList buttonTintList; protected ColorStateList buttonTintList;
protected OnCheckedChangeListener onCheckedChangeListener; protected OnCheckedChangeListener onCheckedChangeListener;
@ColorRes protected int compoundButtonColorId = INVALID_ID; @ColorRes protected int compoundButtonColorId = INVALID_ID;
@ColorInt protected Integer compoundButtonColor = null;
public Builder setChecked(boolean checked) { public Builder setChecked(boolean checked) {
this.checked = checked; this.checked = checked;
@ -126,6 +135,11 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri
return this; return this;
} }
public Builder setCompoundButtonColor(@ColorInt int compoundButtonColor) {
this.compoundButtonColor = compoundButtonColor;
return this;
}
public BottomSheetItemWithCompoundButton create() { public BottomSheetItemWithCompoundButton create() {
return new BottomSheetItemWithCompoundButton(customView, return new BottomSheetItemWithCompoundButton(customView,
layoutId, layoutId,

View file

@ -172,7 +172,7 @@ public class ConfigureMapMenu {
final MapActivity activity, final int themeRes, final boolean nightMode) { final MapActivity activity, final int themeRes, final boolean nightMode) {
final OsmandApplication app = activity.getMyApplication(); final OsmandApplication app = activity.getMyApplication();
final OsmandSettings settings = app.getSettings(); 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); MapLayerMenuListener l = new MapLayerMenuListener(activity, adapter);
adapter.addItem(new ContextMenuItem.ItemBuilder() adapter.addItem(new ContextMenuItem.ItemBuilder()
.setId(SHOW_CATEGORY_ID) .setId(SHOW_CATEGORY_ID)
@ -184,7 +184,7 @@ public class ConfigureMapMenu {
.setId(FAVORITES_ID) .setId(FAVORITES_ID)
.setTitleId(R.string.shared_string_favorites, activity) .setTitleId(R.string.shared_string_favorites, activity)
.setSelected(settings.SHOW_FAVORITES.get()) .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) .setIcon(R.drawable.ic_action_favorite)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_FAVORITES)) .setItemDeleteAction(makeDeleteAction(settings.SHOW_FAVORITES))
.setListener(l) .setListener(l)
@ -196,7 +196,7 @@ public class ConfigureMapMenu {
.setTitleId(R.string.layer_poi, activity) .setTitleId(R.string.layer_poi, activity)
.setSelected(selected) .setSelected(selected)
.setDescription(app.getPoiFilters().getSelectedPoiFiltersName(wiki)) .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) .setIcon(R.drawable.ic_action_info_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(l).createItem()); .setListener(l).createItem());
@ -205,7 +205,7 @@ public class ConfigureMapMenu {
.setId(POI_OVERLAY_LABELS_ID) .setId(POI_OVERLAY_LABELS_ID)
.setTitleId(R.string.layer_amenity_label, activity) .setTitleId(R.string.layer_amenity_label, activity)
.setSelected(settings.SHOW_POI_LABEL.get()) .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) .setIcon(R.drawable.ic_action_text_dark)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_POI_LABEL)) .setItemDeleteAction(makeDeleteAction(settings.SHOW_POI_LABEL))
.setListener(l).createItem()); .setListener(l).createItem());
@ -217,7 +217,7 @@ public class ConfigureMapMenu {
.setIcon(R.drawable.ic_action_transport_bus) .setIcon(R.drawable.ic_action_transport_bus)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setSelected(selected) .setSelected(selected)
.setColor(selected ? selectedProfileColorRes : ContextMenuItem.INVALID_ID) .setColor(selected ? selectedProfileColor : null)
.setListener(l).createItem()); .setListener(l).createItem());
selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles(); selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles();
@ -226,7 +226,7 @@ public class ConfigureMapMenu {
.setTitleId(R.string.layer_gpx_layer, activity) .setTitleId(R.string.layer_gpx_layer, activity)
.setSelected(app.getSelectedGpxHelper().isShowingAnyGpxFiles()) .setSelected(app.getSelectedGpxHelper().isShowingAnyGpxFiles())
.setDescription(app.getSelectedGpxHelper().getGpxDescription()) .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) .setIcon(R.drawable.ic_action_polygom_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(l).createItem()); .setListener(l).createItem());
@ -236,7 +236,7 @@ public class ConfigureMapMenu {
.setId(MAP_MARKERS_ID) .setId(MAP_MARKERS_ID)
.setTitleId(R.string.map_markers, activity) .setTitleId(R.string.map_markers, activity)
.setSelected(selected) .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) .setIcon(R.drawable.ic_action_flag)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_MAP_MARKERS)) .setItemDeleteAction(makeDeleteAction(settings.SHOW_MAP_MARKERS))
.setListener(l).createItem()); .setListener(l).createItem());
@ -267,8 +267,7 @@ public class ConfigureMapMenu {
final int themeRes, final boolean nightMode) { final int themeRes, final boolean nightMode) {
final OsmandApplication app = activity.getMyApplication(); final OsmandApplication app = activity.getMyApplication();
final OsmandSettings settings = app.getSettings(); final OsmandSettings settings = app.getSettings();
final int selectedProfileColorRes = settings.APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode); final int selectedProfileColor = settings.APPLICATION_MODE.get().getProfileColor(nightMode);
final int selectedProfileColor = ContextCompat.getColor(app, selectedProfileColorRes);
adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity) adapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.map_widget_map_rendering, activity)
.setId(MAP_RENDERING_CATEGORY_ID) .setId(MAP_RENDERING_CATEGORY_ID)
@ -705,7 +704,6 @@ public class ConfigureMapMenu {
for (int i = 0; i < prefs.size(); i++) { for (int i = 0; i < prefs.size(); i++) {
prefs.get(i).set(false); prefs.get(i).set(false);
} }
adapter.getItem(pos).setColorRes(ContextMenuItem.INVALID_ID);
a.notifyDataSetInvalidated(); a.notifyDataSetInvalidated();
activity.refreshMapComplete(); activity.refreshMapComplete();
activity.getMapLayers().updateLayers(activity.getMapView()); 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) { if (useDescription) {
final String descr = getDescription(prefs, includedPrefs); final String descr = getDescription(prefs, includedPrefs);
builder.setDescription(descr); builder.setDescription(descr);
@ -840,7 +838,7 @@ public class ConfigureMapMenu {
selected |= prefs.get(i).get(); selected |= prefs.get(i).get();
} }
adapter.getItem(pos).setSelected(selected); 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(); a.notifyDataSetInvalidated();
} }
}); });
@ -875,7 +873,7 @@ public class ConfigureMapMenu {
} else { } else {
adapter.getItem(pos).setSelected(selected); 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(); a.notifyDataSetInvalidated();
activity.refreshMapComplete(); activity.refreshMapComplete();

View file

@ -98,7 +98,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
@Override @Override
public void createMenuItems(Bundle savedInstanceState) { 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); float spacing = getResources().getDimension(R.dimen.line_spacing_extra_description);
LinearLayout linearLayout = new LinearLayout(app); LinearLayout linearLayout = new LinearLayout(app);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 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); streetLightsNightPref.set(!onLeftClick);
} }
}) })
.setCompoundButtonColorId(selectedProfileColorRes) .setCompoundButtonColor(selectedProfileColor)
.setChecked(pref.get()) .setChecked(pref.get())
.setTitle(propertyName) .setTitle(propertyName)
.setIconHidden(true) .setIconHidden(true)
@ -160,7 +160,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
} else if (!STREET_LIGHTING_NIGHT.equals(property.getAttrName())) { } else if (!STREET_LIGHTING_NIGHT.equals(property.getAttrName())) {
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(selectedProfileColorRes) .setCompoundButtonColor(selectedProfileColor)
.setChecked(pref.get()) .setChecked(pref.get())
.setTitle(propertyName) .setTitle(propertyName)
.setIconHidden(true) .setIconHidden(true)
@ -217,7 +217,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet {
} }
if (adapter != null) { if (adapter != null) {
adapter.getItem(position).setSelected(checked); 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( adapter.getItem(position).setDescription(getString(
R.string.ltr_or_rtl_combine_via_slash, R.string.ltr_or_rtl_combine_via_slash,
String.valueOf(selected), String.valueOf(selected),

View file

@ -77,7 +77,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
public boolean processResult(Boolean result) { public boolean processResult(Boolean result) {
if (item != null) { if (item != null) {
item.setSelected(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(); adapter.notifyDataSetChanged();
} }
return true; return true;
@ -86,7 +86,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = TransportLinesMenu.isShowLines(mapActivity.getMyApplication()); boolean selected = TransportLinesMenu.isShowLines(mapActivity.getMyApplication());
if (!selected && item != null) { if (!selected && item != null) {
item.setSelected(true); item.setSelected(true);
item.setColorRes(R.color.osmand_orange); item.setColor(mapActivity, R.color.osmand_orange);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
return false; return false;
@ -94,7 +94,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item); CompoundButton btn = (CompoundButton) view.findViewById(R.id.toggle_item);
if (btn != null && btn.getVisibility() == View.VISIBLE) { if (btn != null && btn.getVisibility() == View.VISIBLE) {
btn.setChecked(!btn.isChecked()); 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(); adapter.notifyDataSetChanged();
return false; return false;
} else { } else {
@ -110,7 +110,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
final PoiFiltersHelper poiFiltersHelper = mapActivity.getMyApplication().getPoiFilters(); final PoiFiltersHelper poiFiltersHelper = mapActivity.getMyApplication().getPoiFilters();
final ContextMenuItem item = menuAdapter.getItem(pos); final ContextMenuItem item = menuAdapter.getItem(pos);
if (item.getSelected() != null) { 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) { if (itemId == R.string.layer_poi) {
PoiUIFilter wiki = poiFiltersHelper.getTopWikiPoiFilter(); PoiUIFilter wiki = poiFiltersHelper.getTopWikiPoiFilter();
@ -139,7 +139,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
@Override @Override
public boolean processResult(Boolean result) { public boolean processResult(Boolean result) {
item.setSelected(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(); adapter.notifyDataSetChanged();
return true; return true;
} }
@ -171,7 +171,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles(); boolean selected = app.getSelectedGpxHelper().isShowingAnyGpxFiles();
item.setSelected(selected); item.setSelected(selected);
item.setDescription(app.getSelectedGpxHelper().getGpxDescription()); 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(); adapter.notifyDataSetChanged();
} }
}); });
@ -189,7 +189,7 @@ final class MapLayerMenuListener extends OnRowItemClick {
boolean selected = pf.isShowingAnyPoi(wiki); boolean selected = pf.isShowingAnyPoi(wiki);
item.setSelected(selected); item.setSelected(selected);
item.setDescription(pf.getSelectedPoiFiltersName(wiki)); 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(); adapter.notifyDataSetChanged();
} }
}; };

View file

@ -174,8 +174,8 @@ public class SelectMapViewQuickActionsBottomSheet extends MenuBottomSheetDialogF
if (appMode != null) { if (appMode != null) {
boolean selected = key.equals(selectedItem); boolean selected = key.equals(selectedItem);
int iconId = appMode.getIconRes(); int iconId = appMode.getIconRes();
int colorId = appMode.getIconColorInfo().getColor(nightMode); int color = appMode.getProfileColor(nightMode);
Drawable icon = getIcon(iconId, colorId); Drawable icon = getPaintedIcon(iconId, color);
String translatedName = appMode.toHumanString(); String translatedName = appMode.toHumanString();
createItemRow(selected, counter, icon, translatedName, key); createItemRow(selected, counter, icon, translatedName, key);
counter++; counter++;

View file

@ -516,13 +516,13 @@ public class LocalIndexesFragment extends OsmandExpandableListFragment implement
.setTitleId(R.string.shared_string_refresh, getContext()) .setTitleId(R.string.shared_string_refresh, getContext())
.setIcon(R.drawable.ic_action_refresh_dark) .setIcon(R.drawable.ic_action_refresh_dark)
.setListener(listener) .setListener(listener)
.setColor(iconColorResId) .setColor(getContext(), iconColorResId)
.createItem()); .createItem());
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.shared_string_delete, getContext()) .setTitleId(R.string.shared_string_delete, getContext())
.setIcon(R.drawable.ic_action_delete_dark) .setIcon(R.drawable.ic_action_delete_dark)
.setListener(listener) .setListener(listener)
.setColor(iconColorResId) .setColor(getContext(), iconColorResId)
.createItem()); .createItem());
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(R.string.local_index_mi_backup, getContext()) .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); MenuItemCompat.setShowAsAction(item, MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
} }
if (contextMenuItem.getIcon() != -1) { 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); item.setIcon(icMenuItem);
} }

View file

@ -474,7 +474,7 @@ public abstract class PointEditorFragmentNew extends BaseOsmAndFragment implemen
if (!ColorDialogs.isPaletteColor(customColor)) { if (!ColorDialogs.isPaletteColor(customColor)) {
colors.add(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); colorsCard.setListener(this);
LinearLayout selectColor = view.findViewById(R.id.select_color); LinearLayout selectColor = view.findViewById(R.id.select_color);
selectColor.addView(colorsCard.build(view.getContext())); selectColor.addView(colorsCard.build(view.getContext()));

View file

@ -61,8 +61,7 @@ public class MapillaryFiltersFragment extends BaseOsmAndFragment {
final int backgroundColor = ContextCompat.getColor(getActivity(), final int backgroundColor = ContextCompat.getColor(getActivity(),
nightMode ? R.color.activity_background_color_dark : R.color.activity_background_color_light); nightMode ? R.color.activity_background_color_dark : R.color.activity_background_color_light);
final DateFormat dateFormat = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM); final DateFormat dateFormat = SimpleDateFormat.getDateInstance(DateFormat.MEDIUM);
final int currentModeColorRes = getMyApplication().getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode); final int currentModeColor = getMyApplication().getSettings().getApplicationMode().getProfileColor(nightMode);
final int currentModeColor = ContextCompat.getColor(getActivity(), currentModeColorRes);
final View view = View.inflate(new ContextThemeWrapper(getContext(), themeRes), R.layout.fragment_mapillary_filters, null); 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); 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 View toggleRow = view.findViewById(R.id.toggle_row);
final boolean selected = settings.SHOW_MAPILLARY.get(); final boolean selected = settings.SHOW_MAPILLARY.get();
final int toggleActionStringId = selected ? R.string.shared_string_on : R.string.shared_string_off; final int toggleActionStringId = selected ? R.string.shared_string_on : R.string.shared_string_off;
int toggleIconColorId; int toggleIconColor;
int toggleIconId; int toggleIconId;
if (selected) { if (selected) {
toggleIconId = R.drawable.ic_action_view; toggleIconId = R.drawable.ic_action_view;
toggleIconColorId = currentModeColorRes; toggleIconColor = currentModeColor;
} else { } else {
toggleIconId = R.drawable.ic_action_hide; 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); ((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); ((AppCompatImageView) toggleRow.findViewById(R.id.toggle_row_icon)).setImageDrawable(drawable);
final CompoundButton toggle = (CompoundButton) toggleRow.findViewById(R.id.toggle_row_toggle); final CompoundButton toggle = (CompoundButton) toggleRow.findViewById(R.id.toggle_row_toggle);
toggle.setOnCheckedChangeListener(null); toggle.setOnCheckedChangeListener(null);

View file

@ -185,7 +185,7 @@ public class MapillaryPlugin extends OsmandPlugin {
ContextMenuItem item = adapter.getItem(pos); ContextMenuItem item = adapter.getItem(pos);
if (item != null) { if (item != null) {
item.setSelected(settings.SHOW_MAPILLARY.get()); 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(); adapter.notifyDataSetChanged();
} }
} }
@ -201,7 +201,7 @@ public class MapillaryPlugin extends OsmandPlugin {
.setTitleId(R.string.street_level_imagery, mapActivity) .setTitleId(R.string.street_level_imagery, mapActivity)
.setDescription("Mapillary") .setDescription("Mapillary")
.setSelected(settings.SHOW_MAPILLARY.get()) .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) .setIcon(R.drawable.ic_action_mapillary)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setItemDeleteAction(makeDeleteAction(settings.SHOW_MAPILLARY)) .setItemDeleteAction(makeDeleteAction(settings.SHOW_MAPILLARY))

View file

@ -99,8 +99,7 @@ public class InputZoomLevelsBottomSheet extends MenuBottomSheetDialogFragment {
final TextView maxZoomValue = sliderView.findViewById(R.id.zoom_value_max); final TextView maxZoomValue = sliderView.findViewById(R.id.zoom_value_max);
maxZoomValue.setText(String.valueOf(maxZoom)); maxZoomValue.setText(String.valueOf(maxZoom));
RangeSlider slider = sliderView.findViewById(R.id.zoom_slider); RangeSlider slider = sliderView.findViewById(R.id.zoom_slider);
int colorProfileRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode); int colorProfile = app.getSettings().getApplicationMode().getProfileColor(nightMode);
int colorProfile = ContextCompat.getColor(app, colorProfileRes);
UiUtilities.setupSlider(slider, nightMode, colorProfile, true); UiUtilities.setupSlider(slider, nightMode, colorProfile, true);
slider.setValueFrom(SLIDER_FROM); slider.setValueFrom(SLIDER_FROM);
slider.setValueTo(SLIDER_TO); slider.setValueTo(SLIDER_TO);

View file

@ -1350,7 +1350,7 @@ public class MeasurementToolFragment extends BaseOsmAndFragment implements Route
snapToRoadBtn.setVisibility(View.VISIBLE); snapToRoadBtn.setVisibility(View.VISIBLE);
profileWithConfig.setVisibility(View.GONE); profileWithConfig.setVisibility(View.GONE);
} else { } else {
icon = getIcon(appMode.getIconRes(), appMode.getIconColorInfo().getColor(nightMode)); icon = getPaintedContentIcon(appMode.getIconRes(), appMode.getProfileColor(nightMode));
snapToRoadBtn.setVisibility(View.GONE); snapToRoadBtn.setVisibility(View.GONE);
profileWithConfig.setVisibility(View.VISIBLE); profileWithConfig.setVisibility(View.VISIBLE);
} }

View file

@ -55,7 +55,7 @@ public class OptionsBottomSheetDialogFragment extends MenuBottomSheetDialogFragm
icon = getContentIcon(R.drawable.ic_action_split_interval); icon = getContentIcon(R.drawable.ic_action_split_interval);
} else { } else {
description = routeAppMode.toHumanString(); description = routeAppMode.toHumanString();
icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode)); icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode));
} }
} else { } else {
description = getString(R.string.shared_string_undefined); description = getString(R.string.shared_string_undefined);

View file

@ -49,7 +49,7 @@ public class ProfileCard extends BaseCard {
for (int i = 0; i < modes.size(); i++) { for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(i); ApplicationMode mode = modes.get(i);
LinearLayout container = view.findViewById(R.id.content_container); 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(); String title = mode.toHumanString();
View.OnClickListener onClickListener = new View.OnClickListener() { View.OnClickListener onClickListener = new View.OnClickListener() {
@Override @Override

View file

@ -117,7 +117,7 @@ public class RouteBetweenPointsBottomSheetDialogFragment extends BottomSheetBeha
for (int i = 0; i < modes.size(); i++) { for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(i); ApplicationMode mode = modes.get(i);
if (!"public_transport".equals(mode.getRoutingProfile())) { 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)); addProfileView(navigationType, onClickListener, i, icon, mode.toHumanString(), mode.equals(appMode));
} }
} }

View file

@ -403,7 +403,7 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo
if (MeasurementEditingContext.DEFAULT_APP_MODE.equals(routeAppMode)) { if (MeasurementEditingContext.DEFAULT_APP_MODE.equals(routeAppMode)) {
icon = getContentIcon(R.drawable.ic_action_split_interval); icon = getContentIcon(R.drawable.ic_action_split_interval);
} else { } else {
icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode)); icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode));
} }
return icon; return icon;
} }

View file

@ -106,7 +106,7 @@ public class SnapToRoadBottomSheetDialogFragment extends BottomSheetDialogFragme
for (int i = 0; i < modes.size(); i++) { for (int i = 0; i < modes.size(); i++) {
ApplicationMode mode = modes.get(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()); addProfileView(container, onClickListener, i, icon, mode.toHumanString());
} }

View file

@ -560,7 +560,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
ApplicationMode appMode = app.getSettings().getApplicationMode(); ApplicationMode appMode = app.getSettings().getApplicationMode();
int textColorPrimary = ContextCompat.getColor(app, nightMode ? R.color.text_color_primary_dark : R.color.text_color_primary_light); 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 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); LinearLayout ll = new LinearLayout(uiCtx);
final int dp24 = AndroidUtils.dpToPx(uiCtx, 24f); final int dp24 = AndroidUtils.dpToPx(uiCtx, 24f);
final int dp8 = AndroidUtils.dpToPx(uiCtx, 8f); final int dp8 = AndroidUtils.dpToPx(uiCtx, 8f);

View file

@ -116,8 +116,7 @@ public class TripRecordingBottomSheet extends MenuBottomSheetDialogFragment {
container = itemView.findViewById(R.id.always_ask_and_range_slider_container); container = itemView.findViewById(R.id.always_ask_and_range_slider_container);
RangeSlider intervalSlider = itemView.findViewById(R.id.interval_slider); RangeSlider intervalSlider = itemView.findViewById(R.id.interval_slider);
intervalSlider.setValueTo(secondsLength + minutesLength - 1); intervalSlider.setValueTo(secondsLength + minutesLength - 1);
int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode); int currentModeColor = app.getSettings().getApplicationMode().getProfileColor(nightMode);
int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
UiUtilities.setupSlider(intervalSlider, nightMode, currentModeColor, true); UiUtilities.setupSlider(intervalSlider, nightMode, currentModeColor, true);
container.setVisibility(View.GONE); container.setVisibility(View.GONE);
intervalSlider.addOnChangeListener(new RangeSlider.OnChangeListener() { intervalSlider.addOnChangeListener(new RangeSlider.OnChangeListener() {

View file

@ -121,7 +121,7 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment
final ApplicationMode mode = app.getSettings().getApplicationMode(); final ApplicationMode mode = app.getSettings().getApplicationMode();
final BottomSheetItemWithCompoundButton[] showOnMapItem = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] showOnMapItem = new BottomSheetItemWithCompoundButton[1];
showOnMapItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() showOnMapItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(mode.getIconColorInfo().getColor(nightMode)) .setCompoundButtonColor(mode.getProfileColor(nightMode))
.setChecked(checked) .setChecked(checked)
.setTitle(getString(R.string.shared_string_show_on_map)) .setTitle(getString(R.string.shared_string_show_on_map))
.setCustomView(getCustomButtonView(app, mode, checked, nightMode)) .setCustomView(getCustomButtonView(app, mode, checked, nightMode))

View file

@ -78,7 +78,7 @@ public class OnlineRoutingCard extends BaseCard {
bottomDivider = view.findViewById(R.id.bottom_divider); bottomDivider = view.findViewById(R.id.bottom_divider);
button = view.findViewById(R.id.button); button = view.findViewById(R.id.button);
int activeColor = ContextCompat.getColor(app, appMode.getIconColorInfo().getColor(nightMode)); int activeColor = appMode.getProfileColor(nightMode);
textFieldBoxes.setPrimaryColor(activeColor); textFieldBoxes.setPrimaryColor(activeColor);
textFieldBoxes.setGravityFloatingLabel(Gravity.START); textFieldBoxes.setGravityFloatingLabel(Gravity.START);

View file

@ -324,7 +324,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
.setTitleId(R.string.layer_osm_bugs, mapActivity) .setTitleId(R.string.layer_osm_bugs, mapActivity)
.setSelected(settings.SHOW_OSM_BUGS.get()) .setSelected(settings.SHOW_OSM_BUGS.get())
.setIcon(R.drawable.ic_action_osm_note) .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) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(new ContextMenuAdapter.OnRowItemClick() { .setListener(new ContextMenuAdapter.OnRowItemClick() {
@ -343,7 +343,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
if (itemId == R.string.layer_osm_bugs) { if (itemId == R.string.layer_osm_bugs) {
OsmandPreference<Boolean> showOsmBugs = settings.SHOW_OSM_BUGS; OsmandPreference<Boolean> showOsmBugs = settings.SHOW_OSM_BUGS;
showOsmBugs.set(isChecked); showOsmBugs.set(isChecked);
adapter.getItem(pos).setColorRes(showOsmBugs.get() ? adapter.getItem(pos).setColor(app, showOsmBugs.get() ?
R.color.osmand_orange : ContextMenuItem.INVALID_ID); R.color.osmand_orange : ContextMenuItem.INVALID_ID);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
updateLayers(mapActivity.getMapView(), mapActivity); updateLayers(mapActivity.getMapView(), mapActivity);
@ -359,14 +359,14 @@ public class OsmEditingPlugin extends OsmandPlugin {
.setTitleId(R.string.layer_osm_edits, mapActivity) .setTitleId(R.string.layer_osm_edits, mapActivity)
.setSelected(settings.SHOW_OSM_EDITS.get()) .setSelected(settings.SHOW_OSM_EDITS.get())
.setIcon(R.drawable.ic_action_openstreetmap_logo) .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() { .setListener(new ContextMenuAdapter.OnRowItemClick() {
@Override @Override
public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) { public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked, int[] viewCoordinates) {
if (itemId == R.string.layer_osm_edits) { if (itemId == R.string.layer_osm_edits) {
OsmandPreference<Boolean> showOsmEdits = settings.SHOW_OSM_EDITS; OsmandPreference<Boolean> showOsmEdits = settings.SHOW_OSM_EDITS;
showOsmEdits.set(isChecked); 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(); adapter.notifyDataSetChanged();
updateLayers(mapActivity.getMapView(), mapActivity); updateLayers(mapActivity.getMapView(), mapActivity);
} }
@ -404,7 +404,7 @@ public class OsmEditingPlugin extends OsmandPlugin {
final AvailableGPXFragment f = ((AvailableGPXFragment) fragment); final AvailableGPXFragment f = ((AvailableGPXFragment) fragment);
optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_upload_gpx, activity) optionsMenuAdapter.addItem(new ContextMenuItem.ItemBuilder().setTitleId(R.string.local_index_mi_upload_gpx, activity)
.setIcon(R.drawable.ic_action_export) .setIcon(R.drawable.ic_action_export)
.setColor(R.color.color_white) .setColor(app, R.color.color_white)
.setListener(new ItemClickListener() { .setListener(new ItemClickListener() {
@Override @Override

View file

@ -46,7 +46,7 @@ public class OsmNotesMenu {
final boolean nightMode = isNightMode(app); final boolean nightMode = isNightMode(app);
final int themeRes = getThemeRes(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 osmNotesStringId = R.string.layer_osm_bugs;
final int showZoomLevelStringId = R.string.show_from_zoom_level; final int showZoomLevelStringId = R.string.show_from_zoom_level;
@ -110,7 +110,7 @@ public class OsmNotesMenu {
.setTitleId(osmNotesStringId, mapActivity) .setTitleId(osmNotesStringId, mapActivity)
.setDescription(mapActivity.getString(R.string.switch_osm_notes_visibility_desc)) .setDescription(mapActivity.getString(R.string.switch_osm_notes_visibility_desc))
.setIcon(R.drawable.ic_action_osm_note) .setIcon(R.drawable.ic_action_osm_note)
.setColor(toggleIconColorId) .setColor(app, toggleIconColorId)
.setListener(l) .setListener(l)
.setSelected(showOsmBugs) .setSelected(showOsmBugs)
.createItem()); .createItem());

View file

@ -310,13 +310,12 @@ public class RearrangePoiFiltersFragment extends DialogFragment implements Selec
ImageView profileIcon = (ImageView) view.findViewById(R.id.profile_icon); ImageView profileIcon = (ImageView) view.findViewById(R.id.profile_icon);
if (profileIcon != null) { if (profileIcon != null) {
int iconRes = selectedAppMode.getIconRes(); int iconRes = selectedAppMode.getIconRes();
int iconColor = selectedAppMode.getIconColorInfo().getColor(nightMode); profileIcon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, selectedAppMode.getProfileColor(nightMode)));
profileIcon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, iconColor));
} }
View profileButton = view.findViewById(R.id.profile_button); View profileButton = view.findViewById(R.id.profile_button);
if (profileButton != null) { if (profileButton != null) {
int iconColor = getSelectedAppMode().getIconColorInfo().getColor(nightMode); int iconColor = getSelectedAppMode().getProfileColor(nightMode);
int bgColor = ContextCompat.getColor(app, nightMode ? int bgColor = ContextCompat.getColor(app, nightMode ?
R.color.divider_color_dark : R.color.active_buttons_and_links_text_light); R.color.divider_color_dark : R.color.active_buttons_and_links_text_light);
int selectedColor = UiUtilities.getColorWithAlpha(iconColor, 0.3f); int selectedColor = UiUtilities.getColorWithAlpha(iconColor, 0.3f);

View file

@ -67,7 +67,7 @@ public class AppProfileArrayAdapter extends ArrayAdapter<ProfileDataObject> {
Drawable iconDrawable; Drawable iconDrawable;
boolean lightContent = app.getSettings().isLightContent(); boolean lightContent = app.getSettings().isLightContent();
if (mode.isSelected()) { if (mode.isSelected()) {
iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColor(!lightContent)); iconDrawable = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getIconColor(!lightContent));
} else { } else {
iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), lightContent); iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), lightContent);
} }

View file

@ -6,10 +6,12 @@ import android.view.ViewGroup;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.CompoundButton.OnCheckedChangeListener;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.view.ContextThemeWrapper;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
@ -35,8 +37,8 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
@Nullable @Nullable
private ProfileSelectedListener profileSelectedListener; private ProfileSelectedListener profileSelectedListener;
private final OsmandApplication app; private final OsmandApplication app;
@ColorRes @ColorInt
private int selectedIconColorRes; private int selectedIconColor;
private boolean bottomButton; private boolean bottomButton;
private String bottomButtonText; private String bottomButtonText;
private static final String BUTTON_ITEM = "button_item"; private static final String BUTTON_ITEM = "button_item";
@ -54,9 +56,10 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
this.bottomButton = !Algorithms.isEmpty(bottomButtonText); this.bottomButton = !Algorithms.isEmpty(bottomButtonText);
this.bottomButtonText = bottomButtonText; this.bottomButtonText = bottomButtonText;
this.nightMode = nightMode; this.nightMode = nightMode;
selectedIconColorRes = nightMode int selectedIconColorRes = nightMode
? R.color.active_color_primary_dark ? R.color.active_color_primary_dark
: R.color.active_color_primary_light; : R.color.active_color_primary_light;
selectedIconColor = ContextCompat.getColor(app, selectedIconColorRes);
} }
public List<Object> getItems() { public List<Object> getItems() {
@ -137,9 +140,9 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter<Conf
if (iconRes == 0 || iconRes == -1) { if (iconRes == 0 || iconRes == -1) {
iconRes = R.drawable.ic_action_world_globe; iconRes = R.drawable.ic_action_world_globe;
} }
selectedIconColorRes = mode.getIconColorInfo().getColor(nightMode); selectedIconColor = mode.getProfileColor(nightMode);
if (selectedItems.contains(mode)) { if (selectedItems.contains(mode)) {
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, selectedIconColorRes)); holder.icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconRes, selectedIconColor));
} else { } else {
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, R.color.profile_icon_color_inactive)); holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, R.color.profile_icon_color_inactive));
} }

View file

@ -14,6 +14,7 @@ import android.widget.ImageButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -241,7 +242,7 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
order = mode.getOrder(); order = mode.getOrder();
} }
profiles.add(new EditProfileDataObject(modeKey, mode.toHumanString(), ProfileDataUtils.getAppModeDescription(getContext(), mode), profiles.add(new EditProfileDataObject(modeKey, mode.toHumanString(), ProfileDataUtils.getAppModeDescription(getContext(), mode),
mode.getIconRes(), false, mode.isCustomProfile(), deleted, mode.getIconColorInfo(), order)); mode.getIconRes(), false, mode.isCustomProfile(), deleted, mode.getProfileColor(false), mode.getProfileColor(true), order));
} }
} }
Collections.sort(profiles, new Comparator<EditProfileDataObject>() { Collections.sort(profiles, new Comparator<EditProfileDataObject>() {
@ -274,8 +275,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
private boolean deleted; private boolean deleted;
private boolean customProfile; private boolean customProfile;
EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, boolean customProfile, boolean deleted, ProfileIconColors iconColor, int order) { EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected,
super(name, descr, stringKey, iconRes, isSelected, iconColor); boolean customProfile, boolean deleted, @ColorInt int iconColorLight, @ColorInt int iconColorDark, int order) {
super(name, descr, stringKey, iconRes, isSelected, iconColorLight, iconColorDark);
this.customProfile = customProfile; this.customProfile = customProfile;
this.deleted = deleted; this.deleted = deleted;
this.order = order; this.order = order;
@ -365,10 +367,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment {
if (iconRes == 0 || iconRes == -1) { if (iconRes == 0 || iconRes == -1) {
iconRes = R.drawable.ic_action_world_globe; iconRes = R.drawable.ic_action_world_globe;
} }
int profileColorResId = mode.getIconColor(nightMode); int colorNoAlpha = mode.getIconColor(nightMode);
int colorNoAlpha = ContextCompat.getColor(app, profileColorResId);
profileViewHolder.icon.setImageDrawable(uiUtilities.getIcon(iconRes, profileColorResId)); profileViewHolder.icon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, colorNoAlpha));
//set up cell color //set up cell color
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f); Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);

View file

@ -12,7 +12,7 @@ public class OnlineRoutingEngineDataObject extends ProfileDataObject {
String description, String description,
String stringKey, String stringKey,
int order) { 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; this.order = order;
} }

View file

@ -1,5 +1,6 @@
package net.osmand.plus.profiles; package net.osmand.plus.profiles;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -12,15 +13,20 @@ public class ProfileDataObject implements Comparable<ProfileDataObject> {
private String stringKey; private String stringKey;
private boolean isSelected; private boolean isSelected;
private boolean isEnabled; 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.name = name;
this.iconRes = iconRes; this.iconRes = iconRes;
this.description = description; this.description = description;
this.isSelected = isSelected; this.isSelected = isSelected;
this.stringKey = stringKey; this.stringKey = stringKey;
this.iconColor = iconColor; this.iconColorLight = iconColorLight;
this.iconColorDark = iconColorDark;
} }
public String getName() { public String getName() {
@ -55,8 +61,9 @@ public class ProfileDataObject implements Comparable<ProfileDataObject> {
return stringKey; return stringKey;
} }
@ColorRes public int getIconColor(boolean isNightMode) { @ColorInt
return iconColor.getColor(isNightMode); public int getIconColor(boolean isNightMode) {
return isNightMode ? iconColorDark : iconColorLight;
} }
@Override @Override

View file

@ -33,7 +33,7 @@ public class ProfileDataUtils {
description = getAppModeDescription(app, mode); description = getAppModeDescription(app, mode);
} }
profiles.add(new ProfileDataObject(mode.toHumanString(), description, 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; return profiles;
} }

View file

@ -31,6 +31,7 @@ public enum ProfileIconColors {
return name; return name;
} }
@ColorRes
public int getColor(boolean nightMode) { public int getColor(boolean nightMode) {
return nightMode ? nightColor : dayColor; return nightMode ? nightColor : dayColor;
} }

View file

@ -11,7 +11,7 @@ public class RoutingProfileDataObject extends ProfileDataObject {
private String fileName; private String fileName;
public RoutingProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, 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; this.fileName = fileName;
} }

View file

@ -67,10 +67,9 @@ public class SelectCopyProfilesMenuAdapter extends AbstractProfileMenuAdapter<Se
if (iconRes == 0 || iconRes == -1) { if (iconRes == 0 || iconRes == -1) {
iconRes = R.drawable.ic_action_world_globe; iconRes = R.drawable.ic_action_world_globe;
} }
int iconColor = appMode.getIconColorInfo().getColor(nightMode); int colorNoAlpha = appMode.getProfileColor(nightMode);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, iconColor));
int colorNoAlpha = ContextCompat.getColor(app, iconColor); holder.icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconRes, colorNoAlpha));
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f); Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
if (selected) { if (selected) {

View file

@ -77,11 +77,12 @@ public class SelectMultipleProfilesBottomSheet extends BasePreferenceBottomSheet
View itemView = UiUtilities.getInflater(app, nightMode) View itemView = UiUtilities.getInflater(app, nightMode)
.inflate(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp, null); .inflate(R.layout.bottom_sheet_item_with_descr_and_checkbox_56dp, null);
int profileColorId = profile.getIconColor(nightMode); int profileColor = profile.getIconColor(nightMode);
int activeColorId = nightMode ? int activeColorId = nightMode ?
R.color.active_color_primary_dark : R.color.active_color_primary_light; R.color.active_color_primary_dark : R.color.active_color_primary_light;
int disableColorId = nightMode ? int disableColorId = nightMode ?
R.color.icon_color_default_dark : R.color.icon_color_default_light; R.color.icon_color_default_dark : R.color.icon_color_default_light;
int disableColor = ContextCompat.getColor(app, disableColorId);
boolean enable = profile.isEnabled(); boolean enable = profile.isEnabled();
TextView tvTitle = itemView.findViewById(R.id.title); TextView tvTitle = itemView.findViewById(R.id.title);
@ -97,8 +98,8 @@ public class SelectMultipleProfilesBottomSheet extends BasePreferenceBottomSheet
tvDescription.setTextColor(ContextCompat.getColor(app, disableColorId)); tvDescription.setTextColor(ContextCompat.getColor(app, disableColorId));
} }
Drawable drawableIcon = app.getUIUtilities().getIcon( Drawable drawableIcon = app.getUIUtilities().getPaintedIcon(
profile.getIconRes(), enable ? profileColorId : disableColorId); profile.getIconRes(), enable ? profileColor : disableColor);
ivIcon.setImageDrawable(drawableIcon); ivIcon.setImageDrawable(drawableIcon);
UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app, UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app,
enable ? activeColorId : disableColorId), compoundButton); enable ? activeColorId : disableColorId), compoundButton);

View file

@ -254,12 +254,13 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet {
boolean isSelected = setupSelected && Algorithms.objectEquals(profile.getStringKey(), selectedItemKey); boolean isSelected = setupSelected && Algorithms.objectEquals(profile.getStringKey(), selectedItemKey);
int iconColor; int iconColor;
if (dialogMode == DialogMode.NAVIGATION_PROFILE) { if (dialogMode == DialogMode.NAVIGATION_PROFILE) {
iconColor = isSelected ? activeColorResId : iconDefaultColorResId; int iconColorResId = isSelected ? activeColorResId : iconDefaultColorResId;
iconColor = ContextCompat.getColor(app, iconColorResId);
} else { } else {
iconColor = profile.getIconColor(nightMode); iconColor = profile.getIconColor(nightMode);
} }
Drawable drawableIcon = app.getUIUtilities().getIcon(profile.getIconRes(), iconColor); Drawable drawableIcon = app.getUIUtilities().getPaintedIcon(profile.getIconRes(), iconColor);
ivIcon.setImageDrawable(drawableIcon); ivIcon.setImageDrawable(drawableIcon);
compoundButton.setChecked(isSelected); compoundButton.setChecked(isSelected);
UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL); UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL);

View file

@ -6,19 +6,12 @@ import android.graphics.drawable.LayerDrawable;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
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.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@ -26,6 +19,13 @@ import org.apache.commons.logging.Log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.view.ContextThemeWrapper;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.RecyclerView;
public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectProfileMenuAdapter.SelectProfileViewHolder> { public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectProfileMenuAdapter.SelectProfileViewHolder> {
private static final Log LOG = PlatformUtil.getLog(SelectProfileMenuAdapter.class); private static final Log LOG = PlatformUtil.getLog(SelectProfileMenuAdapter.class);
@ -33,8 +33,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
private List<Object> items = new ArrayList<>(); private List<Object> items = new ArrayList<>();
private final OsmandApplication app; private final OsmandApplication app;
private ApplicationMode appMode; private ApplicationMode appMode;
@ColorRes @ColorInt
private int selectedIconColorRes; private int selectedIconColor;
private boolean bottomButton; private boolean bottomButton;
private String bottomButtonText; private String bottomButtonText;
private static final String BUTTON_ITEM = "button_item"; private static final String BUTTON_ITEM = "button_item";
@ -53,9 +53,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
this.bottomButton = !Algorithms.isEmpty(bottomButtonText); this.bottomButton = !Algorithms.isEmpty(bottomButtonText);
this.bottomButtonText = bottomButtonText; this.bottomButtonText = bottomButtonText;
this.nightMode = nightMode; this.nightMode = nightMode;
selectedIconColorRes = nightMode int selectedIconColorRes = nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light;
? R.color.active_color_primary_dark selectedIconColor = ContextCompat.getColor(app, selectedIconColorRes);
: R.color.active_color_primary_light;
} }
public List<Object> getItems() { public List<Object> getItems() {
@ -100,11 +99,10 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
holder.title.setText(item.toHumanString()); holder.title.setText(item.toHumanString());
holder.descr.setText(ProfileDataUtils.getAppModeDescription(app, item)); holder.descr.setText(ProfileDataUtils.getAppModeDescription(app, item));
int profileColorResId = item.getIconColorInfo().getColor(nightMode); int colorNoAlpha = item.getProfileColor(nightMode);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(profileColorResId, selectedIconColorRes)); holder.icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(item.getIconRes(), colorNoAlpha));
//set up cell color //set up cell color
int colorNoAlpha = ContextCompat.getColor(app, profileColorResId);
boolean selectedMode = appMode == item; boolean selectedMode = appMode == item;
Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f); Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f);
@ -146,8 +144,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter<SelectP
if (iconRes == 0 || iconRes == -1) { if (iconRes == 0 || iconRes == -1) {
iconRes = R.drawable.ic_action_world_globe; iconRes = R.drawable.ic_action_world_globe;
} }
selectedIconColorRes = mode.getIconColorInfo().getColor(nightMode); selectedIconColor = mode.getProfileColor(nightMode);
holder.icon.setImageDrawable(app.getUIUtilities().getIcon(iconRes, selectedIconColorRes)); holder.icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconRes, selectedIconColor));
} }
class SelectProfileViewHolder extends ProfileAbstractViewHolder { class SelectProfileViewHolder extends ProfileAbstractViewHolder {

View file

@ -372,8 +372,7 @@ public class QuickActionListFragment extends BaseOsmAndFragment
private void updateToolbarSwitch(final boolean isChecked) { private void updateToolbarSwitch(final boolean isChecked) {
OsmandApplication app = requireMyApplication(); OsmandApplication app = requireMyApplication();
ApplicationMode appMode = app.getSettings().getApplicationMode(); ApplicationMode appMode = app.getSettings().getApplicationMode();
int profileColor = appMode.getIconColorInfo().getColor(nightMode); int color = isChecked ? appMode.getProfileColor(nightMode) : ContextCompat.getColor(app, R.color.preference_top_switch_off);
int color = ContextCompat.getColor(app, isChecked ? profileColor : R.color.preference_top_switch_off);
AndroidUtils.setBackground(toolbarSwitchContainer, new ColorDrawable(color)); AndroidUtils.setBackground(toolbarSwitchContainer, new ColorDrawable(color));
SwitchCompat switchView = toolbarSwitchContainer.findViewById(R.id.switchWidget); SwitchCompat switchView = toolbarSwitchContainer.findViewById(R.id.switchWidget);

View file

@ -12,10 +12,12 @@ import android.widget.EditText;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
@ -161,8 +163,8 @@ public abstract class SwitchableAction<T> extends QuickAction {
OsmandApplication app = (OsmandApplication) context.getApplicationContext(); OsmandApplication app = (OsmandApplication) context.getApplicationContext();
Drawable icon = app.getUIUtilities().getIcon( Drawable icon = app.getUIUtilities().getPaintedIcon(
getItemIconRes(app, item), getItemIconColorRes(app, item)); getItemIconRes(app, item), getItemIconColor(app, item));
holder.icon.setImageDrawable(icon); holder.icon.setImageDrawable(icon);
holder.title.setText(getItemName(context, item)); holder.title.setText(getItemName(context, item));
@ -310,10 +312,11 @@ public abstract class SwitchableAction<T> extends QuickAction {
return R.drawable.ic_map; return R.drawable.ic_map;
} }
@ColorRes @ColorInt
protected int getItemIconColorRes(OsmandApplication app, T item) { protected int getItemIconColor(OsmandApplication app, T item) {
boolean nightMode = !app.getSettings().isLightContent(); 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 protected abstract

View file

@ -353,7 +353,6 @@ public class ShowHidePoiAction extends QuickAction {
builder.setIcon(R.drawable.mx_user_defined); builder.setIcon(R.drawable.mx_user_defined);
} }
builder.setColor(ContextMenuItem.INVALID_ID);
builder.setSkipPaintingWithoutColor(true); builder.setSkipPaintingWithoutColor(true);
adapter.addItem(builder.createItem()); adapter.addItem(builder.createItem());
} }

View file

@ -5,6 +5,7 @@ import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.ColorInt;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -182,13 +183,14 @@ public class SwitchProfileAction extends SwitchableAction<String> {
} }
@Override @Override
protected int getItemIconColorRes(OsmandApplication app, String item) { @ColorInt
protected int getItemIconColor(OsmandApplication app, String item) {
ApplicationMode appMode = getModeForKey(item); ApplicationMode appMode = getModeForKey(item);
if (appMode != null) { if (appMode != null) {
boolean nightMode = !app.getSettings().isLightContent(); 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 @Override

View file

@ -13,7 +13,6 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
@ -325,7 +324,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
: mapActivity.getString(R.string.shared_string_none); : mapActivity.getString(R.string.shared_string_none);
item.setDescription(overlayMapDescr); item.setDescription(overlayMapDescr);
item.setSelected(hasOverlayDescription); 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(); adapter.notifyDataSetChanged();
} }
} }
@ -350,7 +349,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
item.setDescription(underlayMapDescr); item.setDescription(underlayMapDescr);
item.setSelected(hasUnderlayDescription); 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(); adapter.notifyDataSetChanged();
@ -383,7 +382,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
.setId(OVERLAY_MAP) .setId(OVERLAY_MAP)
.setDescription(overlayMapDescr) .setDescription(overlayMapDescr)
.setSelected(hasOverlayDescription) .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) .setIcon(R.drawable.ic_layer_top)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener) .setListener(listener)
@ -399,7 +398,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
.setId(UNDERLAY_MAP) .setId(UNDERLAY_MAP)
.setDescription(underlayMapDescr) .setDescription(underlayMapDescr)
.setSelected(hasUnderlayDescription) .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) .setIcon(R.drawable.ic_layer_bottom)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener) .setListener(listener)
@ -485,7 +484,7 @@ public class OsmandRasterMapsPlugin extends OsmandPlugin {
final boolean[] selected = new boolean[downloaded.size()]; final boolean[] selected = new boolean[downloaded.size()];
boolean nightMode = isNightMode(activity); boolean nightMode = isNightMode(activity);
int themeResId = getThemeRes(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, DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createMultiChoiceAdapter(names, nightMode, selected, app,
selectedProfileColor, themeResId, new View.OnClickListener() { selectedProfileColor, themeResId, new View.OnClickListener() {
@Override @Override

View file

@ -11,6 +11,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
@ -64,8 +65,8 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
private List<BottomSheetItemWithCompoundButton> compoundButtons = new ArrayList<>(); private List<BottomSheetItemWithCompoundButton> compoundButtons = new ArrayList<>();
private boolean hideImpassableRoads; private boolean hideImpassableRoads;
@ColorRes @ColorInt
private int compoundButtonColorId = INVALID_ID; private Integer compoundButtonColor = null;
private ApplicationMode appMode; private ApplicationMode appMode;
public void setHideImpassableRoads(boolean hideImpassableRoads) { public void setHideImpassableRoads(boolean hideImpassableRoads) {
@ -236,7 +237,7 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(compoundButtonColorId) .setCompoundButtonColor(compoundButtonColor)
.setChecked(selected) .setChecked(selected)
.setTitle(parameterName) .setTitle(parameterName)
.setLayoutId(R.layout.bottom_sheet_item_with_switch_no_icon) .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) { public void setCompoundButtonColor(@ColorInt int compoundButtonColor) {
this.compoundButtonColorId = compoundButtonColorId; this.compoundButtonColor = compoundButtonColor;
} }
@Override @Override

View file

@ -11,6 +11,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.ColorRes; import androidx.annotation.ColorRes;
import androidx.appcompat.widget.SwitchCompat; import androidx.appcompat.widget.SwitchCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
@ -84,8 +85,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private RoutingHelper routingHelper; private RoutingHelper routingHelper;
private RoutingOptionsHelper routingOptionsHelper; private RoutingOptionsHelper routingOptionsHelper;
private ApplicationMode applicationMode; private ApplicationMode applicationMode;
@ColorRes @ColorInt
private int selectedModeColorId; private int selectedModeColor;
private boolean currentMuteState; private boolean currentMuteState;
private boolean currentUseHeightState; private boolean currentUseHeightState;
private MapActivity mapActivity; private MapActivity mapActivity;
@ -149,7 +150,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
if (dialogMode == null) { if (dialogMode == null) {
dialogMode = DialogMode.DIRECTIONS; dialogMode = DialogMode.DIRECTIONS;
} }
selectedModeColorId = applicationMode.getIconColorInfo().getColor(nightMode); selectedModeColor = applicationMode.getProfileColor(nightMode);
voiceMuteChangeListener = new StateChangedListener<Boolean>() { voiceMuteChangeListener = new StateChangedListener<Boolean>() {
@Override @Override
public void stateChanged(Boolean change) { public void stateChanged(Boolean change) {
@ -271,7 +272,6 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createMuteSoundItem(final LocalRoutingParameter optionsItem) { private BaseBottomSheetItem createMuteSoundItem(final LocalRoutingParameter optionsItem) {
boolean active = !routingHelper.getVoiceRouter().isMuteForMode(applicationMode); boolean active = !routingHelper.getVoiceRouter().isMuteForMode(applicationMode);
int selectedModeColor = ContextCompat.getColor(app, selectedModeColorId);
final View itemView = UiUtilities.getInflater(app, nightMode).inflate( final View itemView = UiUtilities.getInflater(app, nightMode).inflate(
R.layout.bottom_sheet_item_with_descr_switch_and_additional_button_56dp, null, false); R.layout.bottom_sheet_item_with_descr_switch_and_additional_button_56dp, null, false);
final ImageView icon = itemView.findViewById(R.id.icon); 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, 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); nightMode ? R.color.route_info_control_icon_color_dark : R.color.route_info_control_icon_color_light);
if (Build.VERSION.SDK_INT >= 21) { 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); drawable = AndroidUtils.createPressedStateListDrawable(drawable, activeDrawable);
} }
voicePromptsBtnImage.setImageDrawable(drawable); voicePromptsBtnImage.setImageDrawable(drawable);
@ -358,7 +358,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(!active) .setChecked(!active)
.setCompoundButtonColorId(selectedModeColorId) .setCompoundButtonColor(selectedModeColor)
.setDescription(getElevationDescription(parameter)) .setDescription(getElevationDescription(parameter))
.setIcon(getContentIcon(active ? parameter.getActiveIconId() : parameter.getDisabledIconId())) .setIcon(getContentIcon(active ? parameter.getActiveIconId() : parameter.getDisabledIconId()))
.setTitle(getString(R.string.routing_attr_height_obstacles_name)) .setTitle(getString(R.string.routing_attr_height_obstacles_name))
@ -387,7 +387,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createTimeConditionalRoutingItem(final LocalRoutingParameter optionsItem) { private BaseBottomSheetItem createTimeConditionalRoutingItem(final LocalRoutingParameter optionsItem) {
final BottomSheetItemWithCompoundButton[] timeConditionalRoutingItem = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] timeConditionalRoutingItem = new BottomSheetItemWithCompoundButton[1];
timeConditionalRoutingItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() timeConditionalRoutingItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(selectedModeColorId) .setCompoundButtonColor(selectedModeColor)
.setChecked(settings.ENABLE_TIME_CONDITIONAL_ROUTING.getModeValue(applicationMode)) .setChecked(settings.ENABLE_TIME_CONDITIONAL_ROUTING.getModeValue(applicationMode))
.setIcon(getContentIcon((optionsItem.getActiveIconId()))) .setIcon(getContentIcon((optionsItem.getActiveIconId())))
.setTitle(getString(R.string.temporary_conditional_routing)) .setTitle(getString(R.string.temporary_conditional_routing))
@ -433,7 +433,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
private BaseBottomSheetItem createRouteSimulationItem(final LocalRoutingParameter optionsItem) { private BaseBottomSheetItem createRouteSimulationItem(final LocalRoutingParameter optionsItem) {
final BottomSheetItemWithCompoundButton[] simulateNavigationItem = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] simulateNavigationItem = new BottomSheetItemWithCompoundButton[1];
simulateNavigationItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() simulateNavigationItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(selectedModeColorId) .setCompoundButtonColor(selectedModeColor)
.setChecked(settings.simulateNavigation) .setChecked(settings.simulateNavigation)
.setIcon(getContentIcon(R.drawable.ic_action_start_navigation)) .setIcon(getContentIcon(R.drawable.ic_action_start_navigation))
.setTitle(getString(R.string.simulate_navigation)) .setTitle(getString(R.string.simulate_navigation))
@ -470,7 +470,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
routingOptionsHelper.addNewRouteMenuParameter(applicationMode, optionsItem); routingOptionsHelper.addNewRouteMenuParameter(applicationMode, optionsItem);
AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment(); AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment();
avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE); avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE);
avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId); avoidRoadsFragment.setCompoundButtonColor(selectedModeColor);
avoidRoadsFragment.setApplicationMode(applicationMode); avoidRoadsFragment.setApplicationMode(applicationMode);
avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG); avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG);
updateMenu(); updateMenu();
@ -492,7 +492,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment(); AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment();
avoidRoadsFragment.setHideImpassableRoads(true); avoidRoadsFragment.setHideImpassableRoads(true);
avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE); avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE);
avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId); avoidRoadsFragment.setCompoundButtonColor(selectedModeColor);
avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG); avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG);
updateMenu(); updateMenu();
} }
@ -565,7 +565,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment {
if (parameter != null) { if (parameter != null) {
final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1];
BottomSheetItemWithCompoundButton.Builder builder = new BottomSheetItemWithCompoundButton.Builder(); BottomSheetItemWithCompoundButton.Builder builder = new BottomSheetItemWithCompoundButton.Builder();
builder.setCompoundButtonColorId(selectedModeColorId); builder.setCompoundButtonColor(selectedModeColor);
int iconId = -1; int iconId = -1;
if (parameter.routingParameter != null || parameter instanceof RoutingOptionsHelper.OtherLocalRoutingParameter) { if (parameter.routingParameter != null || parameter instanceof RoutingOptionsHelper.OtherLocalRoutingParameter) {
builder.setTitle(parameter.getText(mapActivity)); builder.setTitle(parameter.getText(mapActivity));

View file

@ -153,7 +153,7 @@ public class RoutingOptionsHelper {
Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode); Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode);
int themeRes = getThemeRes(app); int themeRes = getThemeRes(app);
ApplicationMode selectedAppMode = app.getRoutingHelper().getAppMode(); ApplicationMode selectedAppMode = app.getRoutingHelper().getAppMode();
int selectedModeColor = ContextCompat.getColor(app, selectedAppMode.getIconColorInfo().getColor(nightMode)); int selectedModeColor = selectedAppMode.getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter( DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
entries, nightMode, selected, app, selectedModeColor, themeRes, new View.OnClickListener() { entries, nightMode, selected, app, selectedModeColor, themeRes, new View.OnClickListener() {
@Override @Override
@ -334,7 +334,7 @@ public class RoutingOptionsHelper {
final boolean nightMode = isNightMode(app); final boolean nightMode = isNightMode(app);
Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode); Context themedContext = UiUtilities.getThemedContext(mapActivity, nightMode);
ApplicationMode selectedAppMode = app.getRoutingHelper().getAppMode(); 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); AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);
final int layout = R.layout.list_menu_item_native_singlechoice; final int layout = R.layout.list_menu_item_native_singlechoice;

View file

@ -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); UiUtilities.setupCompoundButton(nightMode, selectedProfileColor, compoundButton);
convertView.setOnClickListener(new View.OnClickListener() { convertView.setOnClickListener(new View.OnClickListener() {
@ -516,7 +516,7 @@ public class ShowAlongTheRouteBottomSheet extends MenuBottomSheetDialogFragment
selected = i; selected = i;
} }
} }
int selectedProfileColor = ContextCompat.getColor(app, getAppMode().getIconColorInfo().getColor(nightMode)); int selectedProfileColor = getAppMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter( DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
names, nightMode, selected, app, selectedProfileColor, themeRes, new View.OnClickListener() { names, nightMode, selected, app, selectedProfileColor, themeRes, new View.OnClickListener() {
@Override @Override

View file

@ -1,6 +1,8 @@
package net.osmand.plus.settings.backend; package net.osmand.plus.settings.backend;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.core.content.ContextCompat;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
@ -469,6 +471,15 @@ public class ApplicationMode {
return app.getSettings().LOCATION_ICON.getModeValue(this); 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) { public void setLocationIcon(LocationIcon locationIcon) {
if (locationIcon != null) { if (locationIcon != null) {
app.getSettings().LOCATION_ICON.setModeValue(this, locationIcon); app.getSettings().LOCATION_ICON.setModeValue(this, locationIcon);
@ -485,6 +496,28 @@ public class ApplicationMode {
} }
} }
public List<String> getCustomIconColors() {
return app.getSettings().CUSTOM_ICON_COLORS.getStringsListForProfile(this);
}
public void setCustomIconColors(List<String> 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() { public int getOrder() {
return app.getSettings().APP_MODE_ORDER.getModeValue(this); return app.getSettings().APP_MODE_ORDER.getModeValue(this);
} }
@ -582,6 +615,7 @@ public class ApplicationMode {
mode.setRoutingProfile(builder.routingProfile); mode.setRoutingProfile(builder.routingProfile);
mode.setRouteService(builder.routeService); mode.setRouteService(builder.routeService);
mode.setIconColor(builder.iconColor); mode.setIconColor(builder.iconColor);
mode.setCustomIconColor(builder.customIconColor);
mode.setLocationIcon(builder.locationIcon); mode.setLocationIcon(builder.locationIcon);
mode.setNavigationIcon(builder.navigationIcon); mode.setNavigationIcon(builder.navigationIcon);
mode.setOrder(builder.order); mode.setOrder(builder.order);
@ -604,6 +638,7 @@ public class ApplicationMode {
builder.setUserProfileName(modeBean.userProfileName); builder.setUserProfileName(modeBean.userProfileName);
builder.setIconResName(modeBean.iconName); builder.setIconResName(modeBean.iconName);
builder.setIconColor(modeBean.iconColor); builder.setIconColor(modeBean.iconColor);
builder.setCustomIconColor(modeBean.customIconColor);
builder.setRoutingProfile(modeBean.routingProfile); builder.setRoutingProfile(modeBean.routingProfile);
builder.setRouteService(modeBean.routeService); builder.setRouteService(modeBean.routeService);
builder.setLocationIcon(modeBean.locIcon); builder.setLocationIcon(modeBean.locIcon);
@ -623,6 +658,7 @@ public class ApplicationMode {
mb.stringKey = stringKey; mb.stringKey = stringKey;
mb.userProfileName = getUserProfileName(); mb.userProfileName = getUserProfileName();
mb.iconColor = getIconColorInfo(); mb.iconColor = getIconColorInfo();
mb.customIconColor = getCustomIconColor();
mb.iconName = getIconName(); mb.iconName = getIconName();
mb.parent = parentAppMode != null ? parentAppMode.getStringKey() : null; mb.parent = parentAppMode != null ? parentAppMode.getStringKey() : null;
mb.routeService = getRouteService(); mb.routeService = getRouteService();
@ -699,6 +735,7 @@ public class ApplicationMode {
private String routingProfile; private String routingProfile;
private String iconResName; private String iconResName;
private ProfileIconColors iconColor; private ProfileIconColors iconColor;
private Integer customIconColor;
private LocationIcon locationIcon; private LocationIcon locationIcon;
private NavigationIcon navigationIcon; private NavigationIcon navigationIcon;
private int order = -1; private int order = -1;
@ -722,6 +759,7 @@ public class ApplicationMode {
applicationMode.setRouteService(routeService); applicationMode.setRouteService(routeService);
applicationMode.setRoutingProfile(routingProfile); applicationMode.setRoutingProfile(routingProfile);
applicationMode.setIconResName(iconResName); applicationMode.setIconResName(iconResName);
applicationMode.setCustomIconColor(customIconColor);
applicationMode.setIconColor(iconColor); applicationMode.setIconColor(iconColor);
applicationMode.setLocationIcon(locationIcon); applicationMode.setLocationIcon(locationIcon);
applicationMode.setNavigationIcon(navigationIcon); applicationMode.setNavigationIcon(navigationIcon);
@ -770,6 +808,11 @@ public class ApplicationMode {
return this; return this;
} }
public ApplicationModeBuilder setCustomIconColor(Integer customIconColor) {
this.customIconColor = customIconColor;
return this;
}
public ApplicationModeBuilder setOrder(int order) { public ApplicationModeBuilder setOrder(int order) {
this.order = order; this.order = order;
return this; return this;
@ -798,6 +841,8 @@ public class ApplicationMode {
@Expose @Expose
public ProfileIconColors iconColor = ProfileIconColors.DEFAULT; public ProfileIconColors iconColor = ProfileIconColors.DEFAULT;
@Expose @Expose
public Integer customIconColor = null;
@Expose
public String routingProfile = null; public String routingProfile = null;
@Expose @Expose
public RouteService routeService = RouteService.OSMAND; public RouteService routeService = RouteService.OSMAND;

View file

@ -983,6 +983,10 @@ public class OsmandSettings {
public final CommonPreference<ProfileIconColors> ICON_COLOR = new EnumStringPreference<>(this, public final CommonPreference<ProfileIconColors> ICON_COLOR = new EnumStringPreference<>(this,
"app_mode_icon_color", ProfileIconColors.DEFAULT, ProfileIconColors.values()).makeProfile().cache(); "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<String> CUSTOM_ICON_COLOR = new StringPreference(this, "custom_icon_color", null).makeProfile().cache();
public final CommonPreference<String> USER_PROFILE_NAME = new StringPreference(this, "user_profile_name", "").makeProfile().cache(); public final CommonPreference<String> USER_PROFILE_NAME = new StringPreference(this, "user_profile_name", "").makeProfile().cache();
public final CommonPreference<String> PARENT_APP_MODE = new StringPreference(this, "parent_app_mode", null).makeProfile().cache(); public final CommonPreference<String> PARENT_APP_MODE = new StringPreference(this, "parent_app_mode", null).makeProfile().cache();

View file

@ -301,6 +301,7 @@ public class ProfileSettingsItem extends OsmandSettingsItem {
OsmandSettings settings = app.getSettings(); OsmandSettings settings = app.getSettings();
return new String[] { return new String[] {
settings.ICON_COLOR.getId(), settings.ICON_COLOR.getId(),
settings.CUSTOM_ICON_COLOR.getId(),
settings.ICON_RES_NAME.getId(), settings.ICON_RES_NAME.getId(),
settings.PARENT_APP_MODE.getId(), settings.PARENT_APP_MODE.getId(),
settings.ROUTING_PROFILE.getId(), settings.ROUTING_PROFILE.getId(),

View file

@ -171,7 +171,7 @@ public class AnnouncementTimeBottomSheet extends BasePreferenceBottomSheet
} }
private void setProfileColorToSeekBar() { private void setProfileColorToSeekBar() {
int color = ContextCompat.getColor(app, getAppMode().getIconColorInfo().getColor(nightMode)); int color = getAppMode().getProfileColor(nightMode);
LayerDrawable seekBarProgressLayer = LayerDrawable seekBarProgressLayer =
(LayerDrawable) ContextCompat.getDrawable(app, R.drawable.seekbar_progress_announcement_time); (LayerDrawable) ContextCompat.getDrawable(app, R.drawable.seekbar_progress_announcement_time);

View file

@ -103,7 +103,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
}) })
.create(); .create();
if (isProfileDependent()) { if (isProfileDependent()) {
preferenceBtn[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode)); preferenceBtn[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode));
} }
items.add(preferenceBtn[0]); items.add(preferenceBtn[0]);
@ -133,8 +133,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet {
Context themedCtx = UiUtilities.getThemedContext(app, nightMode); Context themedCtx = UiUtilities.getThemedContext(app, nightMode);
View buttonView = customView.findViewById(R.id.button_container); View buttonView = customView.findViewById(R.id.button_container);
int colorRes = mode.getIconColorInfo().getColor(nightMode); int color = checked ? mode.getProfileColor(nightMode) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic);
int color = checked ? ContextCompat.getColor(themedCtx, colorRes) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic);
int bgColor = UiUtilities.getColorWithAlpha(color, checked ? 0.1f : 0.5f); int bgColor = UiUtilities.getColorWithAlpha(color, checked ? 0.1f : 0.5f);
int selectedColor = UiUtilities.getColorWithAlpha(color, checked ? 0.3f : 0.5f); int selectedColor = UiUtilities.getColorWithAlpha(color, checked ? 0.3f : 0.5f);

View file

@ -5,6 +5,7 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
@ -65,6 +66,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment {
private int checkedColor; private int checkedColor;
private int uncheckedColor; private int uncheckedColor;
private int disabledColor; private int disabledColor;
@ColorInt
private int appModeColor; private int appModeColor;
@Override @Override
@ -101,7 +103,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment {
on = getString(R.string.shared_string_enabled); on = getString(R.string.shared_string_enabled);
off = getString(R.string.shared_string_disabled); 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); activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic);
disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); 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)); 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) { private void createUseHeightButton(Context context) {
boolean checked = useHeightPref.getModeValue(appMode); boolean checked = useHeightPref.getModeValue(appMode);
useHeightButton = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() useHeightButton = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setCompoundButtonColorId(appModeColor) .setCompoundButtonColor(appModeColor)
.setChecked(checked) .setChecked(checked)
.setTitle(checked ? on : off) .setTitle(checked ? on : off)
.setTitleColorId(checked ? activeColor : disabledColor) .setTitleColorId(checked ? activeColor : disabledColor)

View file

@ -89,7 +89,7 @@ public class MultiSelectPreferencesBottomSheet extends BasePreferenceBottomSheet
.setTag(prefId) .setTag(prefId)
.create(); .create();
if (isProfileDependent()) { if (isProfileDependent()) {
item[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode)); item[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode));
} }
items.add(item[0]); items.add(item[0]);
} }

View file

@ -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}; 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 = appMode.getProfileColor(nightMode);
final int appModeColor = ContextCompat.getColor(themedCtx, appModeColorId);
final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); final int activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic);
final int disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); 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]; final BottomSheetItemWithCompoundButton[] preferenceBtn = new BottomSheetItemWithCompoundButton[1];
preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(enabled) .setChecked(enabled)
.setCompoundButtonColorId(appModeColorId) .setCompoundButtonColor(appModeColor)
.setTitle(enabled ? on : off) .setTitle(enabled ? on : off)
.setTitleColorId(enabled ? activeColor : disabledColor) .setTitleColorId(enabled ? activeColor : disabledColor)
.setCustomView(getCustomButtonView(app, getAppMode(), enabled, nightMode)) .setCustomView(getCustomButtonView(app, getAppMode(), enabled, nightMode))

View file

@ -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); String title = getString(customProfile ? R.string.restore_all_profile_settings : R.string.reset_all_profile_settings);
items.add(new TitleItem(title)); items.add(new TitleItem(title));
int profileColor = mode.getIconColorInfo().getColor(nightMode); int colorNoAlpha = mode.getProfileColor(nightMode);
int colorNoAlpha = ContextCompat.getColor(ctx, profileColor);
Drawable backgroundIcon = UiUtilities.getColoredSelectableDrawable(ctx, colorNoAlpha, 0.3f); Drawable backgroundIcon = UiUtilities.getColoredSelectableDrawable(ctx, colorNoAlpha, 0.3f);
Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.10f)), backgroundIcon}; Drawable[] layers = {new ColorDrawable(UiUtilities.getColorWithAlpha(colorNoAlpha, 0.10f)), backgroundIcon};
BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder() BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder()
.setChecked(true) .setChecked(true)
.setCompoundButtonColorId(profileColor) .setCompoundButtonColor(colorNoAlpha)
.setButtonTintList(ColorStateList.valueOf(getResolvedColor(profileColor))) .setButtonTintList(ColorStateList.valueOf(colorNoAlpha))
.setDescription(ProfileDataUtils.getAppModeDescription(ctx, mode)) .setDescription(ProfileDataUtils.getAppModeDescription(ctx, mode))
.setIcon(getIcon(mode.getIconRes(), profileColor)) .setIcon(getPaintedIcon(mode.getIconRes(), colorNoAlpha))
.setTitle(mode.toHumanString()) .setTitle(mode.toHumanString())
.setBackground(new LayerDrawable(layers)) .setBackground(new LayerDrawable(layers))
.setLayoutId(R.layout.preference_profile_item_with_radio_btn) .setLayoutId(R.layout.preference_profile_item_with_radio_btn)

View file

@ -6,6 +6,7 @@ import android.view.View;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
@ -69,8 +70,11 @@ public class SingleSelectPreferenceBottomSheet extends BasePreferenceBottomSheet
final BaseBottomSheetItem[] preferenceItem = new BottomSheetItemWithCompoundButton[1]; final BaseBottomSheetItem[] preferenceItem = new BottomSheetItemWithCompoundButton[1];
preferenceItem[0] = new BottomSheetItemWithCompoundButton.Builder() preferenceItem[0] = new BottomSheetItemWithCompoundButton.Builder()
.setChecked(i == selectedEntryIndex) .setChecked(i == selectedEntryIndex)
.setButtonTintList(AndroidUtils.createCheckedColorStateList(ctx, R.color.icon_color_default_light, .setButtonTintList(AndroidUtils.createCheckedColorIntStateList(
isProfileDependent() ? getAppMode().getIconColorInfo().getColor(nightMode) : getActiveColorId())) ContextCompat.getColor(ctx,R.color.icon_color_default_light),
isProfileDependent() ?
getAppMode().getProfileColor(nightMode) :
ContextCompat.getColor(ctx, getActiveColorId())))
.setTitle(entries[i]) .setTitle(entries[i])
.setTag(i) .setTag(i)
.setLayoutId(R.layout.bottom_sheet_item_with_radio_btn_left) .setLayoutId(R.layout.bottom_sheet_item_with_radio_btn_left)

View file

@ -118,8 +118,7 @@ public class WakeTimeBottomSheet extends BasePreferenceBottomSheet {
} }
}); });
int appModeColorId = getAppMode().getIconColorInfo().getColor(nightMode); int appModeColor = getAppMode().getProfileColor(nightMode);
int appModeColor = ContextCompat.getColor(themedCtx, appModeColorId);
UiUtilities.setupSlider(slider, nightMode, appModeColor, true); UiUtilities.setupSlider(slider, nightMode, appModeColor, true);
items.add(new BaseBottomSheetItem.Builder() items.add(new BaseBottomSheetItem.Builder()

View file

@ -680,12 +680,9 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl
@ColorInt @ColorInt
protected int getActiveProfileColor() { protected int getActiveProfileColor() {
return ContextCompat.getColor(app, getActiveProfileColorRes()); return isProfileDependent() ?
} getSelectedAppMode().getProfileColor(isNightMode()) :
ContextCompat.getColor(app, nightMode ? R.color.icon_color_active_dark : R.color.icon_color_active_light);
@ColorRes
protected int getActiveProfileColorRes() {
return isProfileDependent() ? getSelectedAppMode().getIconColorInfo().getColor(isNightMode()) : R.color.icon_color_active_light;
} }
@ColorRes @ColorRes
@ -801,7 +798,7 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl
protected Drawable getActiveIcon(@DrawableRes int id) { protected Drawable getActiveIcon(@DrawableRes int id) {
UiUtilities cache = getIconsCache(); 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) { 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); Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled);
if (Build.VERSION.SDK_INT < 21) { 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); icon = DrawableCompat.wrap(icon);
DrawableCompat.setTintList(icon, colorStateList); DrawableCompat.setTintList(icon, colorStateList);
return icon; return icon;

View file

@ -6,9 +6,6 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
import net.osmand.PlatformUtil; 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.plus.settings.backend.ApplicationMode.ApplicationModeBean;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import java.io.File; import java.io.File;
import java.util.List; 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; import static net.osmand.plus.settings.backend.backup.FileSettingsItem.FileSubtype;
public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@ -121,7 +122,10 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter<RecyclerView
} }
int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName); int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName);
ProfileIconColors iconColor = modeBean.iconColor; ProfileIconColors iconColor = modeBean.iconColor;
itemHolder.icon.setImageDrawable(uiUtilities.getIcon(profileIconRes, iconColor.getColor(nightMode))); Integer customIconColor = modeBean.customIconColor;
int actualIconColor = customIconColor != null ?
customIconColor : ContextCompat.getColor(app, iconColor.getColor(nightMode));
itemHolder.icon.setImageDrawable(uiUtilities.getPaintedIcon(profileIconRes, actualIconColor));
} else if (currentItem instanceof QuickAction) { } else if (currentItem instanceof QuickAction) {
QuickAction action = (QuickAction) currentItem; QuickAction action = (QuickAction) currentItem;
itemHolder.title.setText(action.getName(app)); itemHolder.title.setText(action.getName(app));

View file

@ -6,13 +6,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.widget.CompoundButtonCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.GPXUtilities.GPXTrackAnalysis; import net.osmand.GPXUtilities.GPXTrackAnalysis;
import net.osmand.IndexConstants; import net.osmand.IndexConstants;
@ -61,13 +54,20 @@ import net.osmand.plus.settings.fragments.ExportSettingsAdapter.OnItemSelectedLi
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
import net.osmand.view.ThreeStateCheckbox; import net.osmand.view.ThreeStateCheckbox;
import org.apache.commons.logging.Log;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import java.io.File; import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.widget.CompoundButtonCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import static net.osmand.view.ThreeStateCheckbox.State.CHECKED; import static net.osmand.view.ThreeStateCheckbox.State.CHECKED;
import static net.osmand.view.ThreeStateCheckbox.State.MISC; import static net.osmand.view.ThreeStateCheckbox.State.MISC;
import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED; import static net.osmand.view.ThreeStateCheckbox.State.UNCHECKED;
@ -306,7 +306,10 @@ public class ExportItemsBottomSheet extends MenuBottomSheetDialogFragment {
} }
int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName); int profileIconRes = AndroidUtils.getDrawableId(app, modeBean.iconName);
ProfileIconColors iconColor = modeBean.iconColor; ProfileIconColors iconColor = modeBean.iconColor;
builder.setIcon(uiUtilities.getIcon(profileIconRes, iconColor.getColor(nightMode))); Integer customIconColor = modeBean.customIconColor;
int actualIconColor = customIconColor != null ?
customIconColor : ContextCompat.getColor(app, iconColor.getColor(nightMode));
builder.setIcon(uiUtilities.getPaintedIcon(profileIconRes, actualIconColor));
} else if (object instanceof QuickAction) { } else if (object instanceof QuickAction) {
QuickAction quickAction = (QuickAction) object; QuickAction quickAction = (QuickAction) object;
builder.setTitle(quickAction.getName(app)); builder.setTitle(quickAction.getName(app));

View file

@ -142,7 +142,6 @@ public class GlobalSettingsFragment extends BaseSettingsFragment
private void setupDefaultAppModePref() { private void setupDefaultAppModePref() {
Preference defaultApplicationMode = (Preference) findPreference(settings.DEFAULT_APPLICATION_MODE.getId()); Preference defaultApplicationMode = (Preference) findPreference(settings.DEFAULT_APPLICATION_MODE.getId());
int iconColor = settings.getApplicationMode().getIconColorInfo().getColor(isNightMode());
String summary; String summary;
int iconId; int iconId;
if (settings.USE_LAST_APPLICATION_MODE_BY_DEFAULT.get()) { if (settings.USE_LAST_APPLICATION_MODE_BY_DEFAULT.get()) {
@ -153,7 +152,7 @@ public class GlobalSettingsFragment extends BaseSettingsFragment
summary = appMode.toHumanString(); summary = appMode.toHumanString();
iconId = appMode.getIconRes(); iconId = appMode.getIconRes();
} }
defaultApplicationMode.setIcon(getIcon(iconId, iconColor)); defaultApplicationMode.setIcon(getPaintedIcon(iconId, settings.getApplicationMode().getProfileColor(isNightMode())));
defaultApplicationMode.setSummary(summary); defaultApplicationMode.setSummary(summary);
} }

View file

@ -87,8 +87,7 @@ public class MainSettingsFragment extends BaseSettingsFragment implements OnSele
if (CONFIGURE_PROFILE.equals(key)) { if (CONFIGURE_PROFILE.equals(key)) {
View selectedProfile = holder.itemView.findViewById(R.id.selectable_list_item); View selectedProfile = holder.itemView.findViewById(R.id.selectable_list_item);
if (selectedProfile != null) { if (selectedProfile != null) {
int activeProfileColorId = getSelectedAppMode().getIconColorInfo().getColor(isNightMode()); int activeProfileColor = getSelectedAppMode().getProfileColor(isNightMode());
int activeProfileColor = ContextCompat.getColor(app, activeProfileColorId);
Drawable backgroundDrawable = new ColorDrawable(UiUtilities.getColorWithAlpha(activeProfileColor, 0.15f)); Drawable backgroundDrawable = new ColorDrawable(UiUtilities.getColorWithAlpha(activeProfileColor, 0.15f));
AndroidUtils.setBackground(selectedProfile, backgroundDrawable); AndroidUtils.setBackground(selectedProfile, backgroundDrawable);
} }
@ -212,7 +211,7 @@ public class MainSettingsFragment extends BaseSettingsFragment implements OnSele
private Drawable getAppProfilesIcon(ApplicationMode applicationMode, boolean appProfileEnabled) { private Drawable getAppProfilesIcon(ApplicationMode applicationMode, boolean appProfileEnabled) {
int iconResId = applicationMode.getIconRes(); int iconResId = applicationMode.getIconRes();
return appProfileEnabled ? app.getUIUtilities().getIcon(applicationMode.getIconRes(), applicationMode.getIconColorInfo().getColor(isNightMode())) return appProfileEnabled ? app.getUIUtilities().getPaintedIcon(applicationMode.getIconRes(), applicationMode.getProfileColor(isNightMode()))
: getIcon(iconResId, isNightMode() ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light); : getIcon(iconResId, isNightMode() ? R.color.icon_color_secondary_dark : R.color.icon_color_secondary_light);
} }

View file

@ -23,7 +23,41 @@ import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.plus.R;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.profiles.LocationIcon;
import net.osmand.plus.profiles.NavigationIcon;
import net.osmand.plus.profiles.ProfileIconColors;
import net.osmand.plus.profiles.ProfileIcons;
import net.osmand.plus.profiles.SelectProfileBottomSheet;
import net.osmand.plus.profiles.SelectProfileBottomSheet.DialogMode;
import net.osmand.plus.profiles.SelectProfileBottomSheet.OnSelectProfileCallback;
import net.osmand.plus.routepreparationmenu.cards.BaseCard;
import net.osmand.plus.routepreparationmenu.cards.BaseCard.CardListener;
import net.osmand.plus.routing.RouteProvider;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsHelper;
import net.osmand.plus.track.ColorsCard;
import net.osmand.plus.track.CustomColorBottomSheet.ColorPickerListener;
import net.osmand.plus.widgets.FlowLayout;
import net.osmand.plus.widgets.OsmandTextFieldBoxes;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import androidx.activity.OnBackPressedCallback; import androidx.activity.OnBackPressedCallback;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@ -37,39 +71,11 @@ import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder; import androidx.preference.PreferenceViewHolder;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import net.osmand.AndroidUtils;
import net.osmand.IndexConstants;
import net.osmand.PlatformUtil;
import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.R;
import net.osmand.plus.settings.backend.backup.ProfileSettingsItem;
import net.osmand.plus.settings.backend.backup.SettingsHelper;
import net.osmand.plus.UiUtilities;
import net.osmand.plus.UiUtilities.DialogButtonType;
import net.osmand.plus.profiles.LocationIcon;
import net.osmand.plus.profiles.NavigationIcon;
import net.osmand.plus.profiles.ProfileIconColors;
import net.osmand.plus.profiles.ProfileIcons;
import net.osmand.plus.profiles.SelectProfileBottomSheet;
import net.osmand.plus.profiles.SelectProfileBottomSheet.DialogMode;
import net.osmand.plus.profiles.SelectProfileBottomSheet.OnSelectProfileCallback;
import net.osmand.plus.routing.RouteProvider;
import net.osmand.plus.widgets.FlowLayout;
import net.osmand.plus.widgets.OsmandTextFieldBoxes;
import net.osmand.util.Algorithms;
import org.apache.commons.logging.Log;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID; import static net.osmand.aidlapi.OsmAndCustomizationConstants.DRAWER_SETTINGS_ID;
import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILES_LIST_UPDATED_ARG; import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILES_LIST_UPDATED_ARG;
import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILE_KEY_ARG; import static net.osmand.plus.profiles.SelectProfileBottomSheet.PROFILE_KEY_ARG;
public class ProfileAppearanceFragment extends BaseSettingsFragment implements OnSelectProfileCallback { public class ProfileAppearanceFragment extends BaseSettingsFragment implements OnSelectProfileCallback, CardListener, ColorPickerListener {
private static final Log LOG = PlatformUtil.getLog(ProfileAppearanceFragment.class); private static final Log LOG = PlatformUtil.getLog(ProfileAppearanceFragment.class);
@ -90,6 +96,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
private static final String PROFILE_STRINGKEY_KEY = "profile_stringkey_key"; private static final String PROFILE_STRINGKEY_KEY = "profile_stringkey_key";
private static final String PROFILE_ICON_RES_KEY = "profile_icon_res_key"; private static final String PROFILE_ICON_RES_KEY = "profile_icon_res_key";
private static final String PROFILE_COLOR_KEY = "profile_color_key"; private static final String PROFILE_COLOR_KEY = "profile_color_key";
private static final String PROFILE_CUSTOM_COLOR_KEY = "profile_custom_color_key";
private static final String PROFILE_PARENT_KEY = "profile_parent_key"; private static final String PROFILE_PARENT_KEY = "profile_parent_key";
private static final String PROFILE_LOCATION_ICON_KEY = "profile_location_icon_key"; private static final String PROFILE_LOCATION_ICON_KEY = "profile_location_icon_key";
private static final String PROFILE_NAVIGATION_ICON_KEY = "profile_navigation_icon_key"; private static final String PROFILE_NAVIGATION_ICON_KEY = "profile_navigation_icon_key";
@ -105,7 +112,8 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
private ApplicationProfileObject profile; private ApplicationProfileObject profile;
private ApplicationProfileObject changedProfile; private ApplicationProfileObject changedProfile;
private EditText profileName; private EditText profileName;
private FlowLayout colorItems; private TextView colorName;
private ColorsCard colorsCard;
private FlowLayout iconItems; private FlowLayout iconItems;
private FlowLayout locationIconItems; private FlowLayout locationIconItems;
private FlowLayout navIconItems; private FlowLayout navIconItems;
@ -145,6 +153,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
changedProfile.name = profile.name; changedProfile.name = profile.name;
} }
changedProfile.color = profile.color; changedProfile.color = profile.color;
changedProfile.customColor = profile.customColor;
changedProfile.iconRes = profile.iconRes; changedProfile.iconRes = profile.iconRes;
changedProfile.routingProfile = profile.routingProfile; changedProfile.routingProfile = profile.routingProfile;
changedProfile.routeService = profile.routeService; changedProfile.routeService = profile.routeService;
@ -164,6 +173,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
profile.parent = baseModeForNewProfile.getParent(); profile.parent = baseModeForNewProfile.getParent();
profile.name = baseModeForNewProfile.toHumanString(); profile.name = baseModeForNewProfile.toHumanString();
profile.color = baseModeForNewProfile.getIconColorInfo(); profile.color = baseModeForNewProfile.getIconColorInfo();
profile.customColor = baseModeForNewProfile.getCustomIconColor();
profile.iconRes = baseModeForNewProfile.getIconRes(); profile.iconRes = baseModeForNewProfile.getIconRes();
profile.routingProfile = baseModeForNewProfile.getRoutingProfile(); profile.routingProfile = baseModeForNewProfile.getRoutingProfile();
profile.routeService = baseModeForNewProfile.getRouteService(); profile.routeService = baseModeForNewProfile.getRouteService();
@ -300,6 +310,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
outState.putString(PROFILE_STRINGKEY_KEY, changedProfile.stringKey); outState.putString(PROFILE_STRINGKEY_KEY, changedProfile.stringKey);
outState.putInt(PROFILE_ICON_RES_KEY, changedProfile.iconRes); outState.putInt(PROFILE_ICON_RES_KEY, changedProfile.iconRes);
outState.putSerializable(PROFILE_COLOR_KEY, changedProfile.color); outState.putSerializable(PROFILE_COLOR_KEY, changedProfile.color);
outState.putInt(PROFILE_CUSTOM_COLOR_KEY, changedProfile.customColor);
if (changedProfile.parent != null) { if (changedProfile.parent != null) {
outState.putString(PROFILE_PARENT_KEY, changedProfile.parent.getStringKey()); outState.putString(PROFILE_PARENT_KEY, changedProfile.parent.getStringKey());
} }
@ -314,6 +325,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
changedProfile.stringKey = savedInstanceState.getString(PROFILE_STRINGKEY_KEY); changedProfile.stringKey = savedInstanceState.getString(PROFILE_STRINGKEY_KEY);
changedProfile.iconRes = savedInstanceState.getInt(PROFILE_ICON_RES_KEY); changedProfile.iconRes = savedInstanceState.getInt(PROFILE_ICON_RES_KEY);
changedProfile.color = (ProfileIconColors) savedInstanceState.getSerializable(PROFILE_COLOR_KEY); changedProfile.color = (ProfileIconColors) savedInstanceState.getSerializable(PROFILE_COLOR_KEY);
changedProfile.customColor = savedInstanceState.getInt(PROFILE_CUSTOM_COLOR_KEY);
String parentStringKey = savedInstanceState.getString(PROFILE_PARENT_KEY); String parentStringKey = savedInstanceState.getString(PROFILE_PARENT_KEY);
changedProfile.parent = ApplicationMode.valueOfStringKey(parentStringKey, null); changedProfile.parent = ApplicationMode.valueOfStringKey(parentStringKey, null);
isBaseProfileImported = savedInstanceState.getBoolean(IS_BASE_PROFILE_IMPORTED); isBaseProfileImported = savedInstanceState.getBoolean(IS_BASE_PROFILE_IMPORTED);
@ -330,7 +342,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
} }
View profileButton = view.findViewById(R.id.profile_button); View profileButton = view.findViewById(R.id.profile_button);
if (profileButton != null) { if (profileButton != null) {
int iconColor = ContextCompat.getColor(app, changedProfile.color.getColor(isNightMode())); int iconColor = changedProfile.getActualColor();
AndroidUtils.setBackground(profileButton, UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, AndroidUtils.setBackground(profileButton, UiUtilities.tintDrawable(AppCompatResources.getDrawable(app,
R.drawable.circle_background_light), UiUtilities.getColorWithAlpha(iconColor, 0.1f))); R.drawable.circle_background_light), UiUtilities.getColorWithAlpha(iconColor, 0.1f)));
ImageView profileIcon = view.findViewById(R.id.profile_icon); ImageView profileIcon = view.findViewById(R.id.profile_icon);
@ -408,14 +420,11 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
} }
} }
}); });
} else if (SELECT_COLOR.equals(preference.getKey())) {
colorName = holder.itemView.findViewById(R.id.summary);
colorName.setTextColor(ContextCompat.getColor(app, R.color.preference_category_title));
} else if (COLOR_ITEMS.equals(preference.getKey())) { } else if (COLOR_ITEMS.equals(preference.getKey())) {
colorItems = (FlowLayout) holder.findViewById(R.id.color_items); createColorsCard(holder);
colorItems.removeAllViews();
for (ProfileIconColors color : ProfileIconColors.values()) {
View colorItem = createColorItemView(color, colorItems);
colorItems.addView(colorItem, new FlowLayout.LayoutParams(0, 0));
}
updateColorSelector(changedProfile.color);
} else if (ICON_ITEMS.equals(preference.getKey())) { } else if (ICON_ITEMS.equals(preference.getKey())) {
iconItems = (FlowLayout) holder.findViewById(R.id.color_items); iconItems = (FlowLayout) holder.findViewById(R.id.color_items);
iconItems.removeAllViews(); iconItems.removeAllViews();
@ -462,60 +471,29 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
} }
} }
private View createColorItemView(final ProfileIconColors colorRes, ViewGroup rootView) { private void createColorsCard(PreferenceViewHolder holder) {
FrameLayout colorItemView = (FrameLayout) UiUtilities.getInflater(getContext(), isNightMode()) MapActivity mapActivity = getMapActivity();
.inflate(R.layout.preference_circle_item, rootView, false); if (mapActivity == null) {
ImageView coloredCircle = colorItemView.findViewById(R.id.background); return;
AndroidUtils.setBackground(coloredCircle,
UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, R.drawable.circle_background_light),
ContextCompat.getColor(app, colorRes.getColor(isNightMode()))));
coloredCircle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (colorRes != changedProfile.color) {
updateColorSelector(colorRes);
setVerticalScrollBarEnabled(false);
updatePreference(findPreference(MASTER_PROFILE));
updatePreference(findPreference(LOCATION_ICON_ITEMS));
updatePreference(findPreference(NAV_ICON_ITEMS));
setVerticalScrollBarEnabled(true);
} }
} FlowLayout colorsCardContainer = (FlowLayout) holder.findViewById(R.id.color_items);
}); colorsCardContainer.removeAllViews();
ImageView outlineCircle = colorItemView.findViewById(R.id.outline); int selectedColor = changedProfile.getActualColor();
ImageView checkMark = colorItemView.findViewById(R.id.checkMark); List<Integer> colors = new ArrayList<>();
GradientDrawable gradientDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.circle_contour_bg_light); for (ProfileIconColors color : ProfileIconColors.values()) {
if (gradientDrawable != null) { colors.add(ContextCompat.getColor(app, color.getColor(isNightMode())));
gradientDrawable.setStroke(AndroidUtils.dpToPx(app, 2),
UiUtilities.getColorWithAlpha(ContextCompat.getColor(app, colorRes.getColor(isNightMode())), 0.3f));
outlineCircle.setImageDrawable(gradientDrawable);
} }
checkMark.setVisibility(View.GONE); colorsCard = new ColorsCard(mapActivity, selectedColor, this, colors, app.getSettings().CUSTOM_ICON_COLORS, getSelectedAppMode());
outlineCircle.setVisibility(View.GONE); colorsCard.setListener(this);
colorItemView.setTag(colorRes); colorsCardContainer.addView(colorsCard.build(app));
return colorItemView; updateColorName();
}
private void updateColorSelector(ProfileIconColors color) {
View colorItem = colorItems.findViewWithTag(changedProfile.color);
colorItem.findViewById(R.id.outline).setVisibility(View.GONE);
colorItem.findViewById(R.id.checkMark).setVisibility(View.GONE);
colorItem = colorItems.findViewWithTag(color);
colorItem.findViewById(R.id.outline).setVisibility(View.VISIBLE);
colorItem.findViewById(R.id.checkMark).setVisibility(View.VISIBLE);
changedProfile.color = color;
if (iconItems != null) {
updateIconColor(changedProfile.iconRes);
}
updateProfileNameAppearance();
updateProfileButton();
} }
private void updateProfileNameAppearance() { private void updateProfileNameAppearance() {
if (profileName != null) { if (profileName != null) {
if (profileName.isFocusable() && profileName.isFocusableInTouchMode()) { if (profileName.isFocusable() && profileName.isFocusableInTouchMode()) {
int selectedColor = ContextCompat.getColor(app, changedProfile.color.getColor(isNightMode())); int selectedColor = changedProfile.getActualColor();
profileNameOtfb.setPrimaryColor(selectedColor); profileNameOtfb.setPrimaryColor(selectedColor);
profileName.getBackground().mutate().setColorFilter(selectedColor, PorterDuff.Mode.SRC_ATOP); 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) { private View createLocationIconView(final LocationIcon locationIcon, ViewGroup rootView) {
FrameLayout locationIconView = (FrameLayout) UiUtilities.getInflater(getContext(), isNightMode()) FrameLayout locationIconView = (FrameLayout) UiUtilities.getInflater(getContext(), isNightMode())
.inflate(R.layout.preference_select_icon_button, rootView, false); .inflate(R.layout.preference_select_icon_button, rootView, false);
int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor( int changedProfileColor = changedProfile.getActualColor();
app.getDaynightHelper().isNightModeForMapControls()));
LayerDrawable locationIconDrawable = (LayerDrawable) AppCompatResources.getDrawable(app, locationIcon.getIconId()); LayerDrawable locationIconDrawable = (LayerDrawable) AppCompatResources.getDrawable(app, locationIcon.getIconId());
if (locationIconDrawable != null) { if (locationIconDrawable != null) {
DrawableCompat.setTint(DrawableCompat.wrap(locationIconDrawable.getDrawable(1)), changedProfileColor); 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()); LayerDrawable navigationIconDrawable = (LayerDrawable) AppCompatResources.getDrawable(app, navigationIcon.getIconId());
if (navigationIconDrawable != null) { if (navigationIconDrawable != null) {
DrawableCompat.setTint(DrawableCompat.wrap(navigationIconDrawable.getDrawable(1)), 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 imageView = navigationIconView.findViewById(R.id.icon);
imageView.setImageDrawable(navigationIconDrawable); imageView.setImageDrawable(navigationIconDrawable);
@ -634,8 +611,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
}); });
ImageView outlineRect = navigationIconView.findViewById(R.id.outlineRect); ImageView outlineRect = navigationIconView.findViewById(R.id.outlineRect);
GradientDrawable rectContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.bg_select_icon_button_outline); GradientDrawable rectContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.bg_select_icon_button_outline);
int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor( int changedProfileColor = changedProfile.getActualColor();
app.getDaynightHelper().isNightModeForMapControls()));
if (rectContourDrawable != null) { if (rectContourDrawable != null) {
rectContourDrawable.setStroke(AndroidUtils.dpToPx(app, 2), changedProfileColor); rectContourDrawable.setStroke(AndroidUtils.dpToPx(app, 2), changedProfileColor);
} }
@ -660,13 +636,13 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
} }
private void setIconColor(int iconRes) { private void setIconColor(int iconRes) {
int changedProfileColor = ContextCompat.getColor(app, changedProfile.color.getColor( int changedProfileColor = changedProfile.getActualColor();
app.getDaynightHelper().isNightModeForMapControls()));
View iconItem = iconItems.findViewWithTag(iconRes); View iconItem = iconItems.findViewWithTag(iconRes);
if (iconItem != null) { if (iconItem != null) {
int newColor = changedProfile.getActualColor();
AndroidUtils.setBackground(iconItem.findViewById(R.id.background), AndroidUtils.setBackground(iconItem.findViewById(R.id.background),
UiUtilities.tintDrawable(AppCompatResources.getDrawable(app, R.drawable.circle_background_light), 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); ImageView outlineCircle = iconItem.findViewById(R.id.outline);
GradientDrawable circleContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.circle_contour_bg_light); GradientDrawable circleContourDrawable = (GradientDrawable) AppCompatResources.getDrawable(app, R.drawable.circle_contour_bg_light);
if (circleContourDrawable != null) { if (circleContourDrawable != null) {
@ -775,6 +751,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
mode.setRoutingProfile(changedProfile.routingProfile); mode.setRoutingProfile(changedProfile.routingProfile);
mode.setRouteService(changedProfile.routeService); mode.setRouteService(changedProfile.routeService);
mode.setIconColor(changedProfile.color); mode.setIconColor(changedProfile.color);
mode.setCustomIconColor(changedProfile.customColor);
mode.setLocationIcon(changedProfile.locationIcon); mode.setLocationIcon(changedProfile.locationIcon);
mode.setNavigationIcon(changedProfile.navigationIcon); mode.setNavigationIcon(changedProfile.navigationIcon);
@ -795,6 +772,7 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
.setRoutingProfile(changedProfile.routingProfile) .setRoutingProfile(changedProfile.routingProfile)
.setRouteService(changedProfile.routeService) .setRouteService(changedProfile.routeService)
.setIconColor(changedProfile.color) .setIconColor(changedProfile.color)
.setCustomIconColor(changedProfile.customColor)
.setLocationIcon(changedProfile.locationIcon) .setLocationIcon(changedProfile.locationIcon)
.setNavigationIcon(changedProfile.navigationIcon); .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 @Override
public void onProfileSelected(Bundle args) { public void onProfileSelected(Bundle args) {
String profileKey = args.getString(PROFILE_KEY_ARG); String profileKey = args.getString(PROFILE_KEY_ARG);
@ -938,6 +928,53 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
updateParentProfile(profileKey, imported); 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) { public static boolean showInstance(FragmentActivity activity, SettingsScreenType screenType, @Nullable String appMode, boolean imported) {
try { try {
Fragment fragment = Fragment.instantiate(activity, screenType.fragmentName); Fragment fragment = Fragment.instantiate(activity, screenType.fragmentName);
@ -963,12 +1000,29 @@ public class ProfileAppearanceFragment extends BaseSettingsFragment implements O
ApplicationMode parent = null; ApplicationMode parent = null;
String name; String name;
ProfileIconColors color; ProfileIconColors color;
Integer customColor = null;
int iconRes; int iconRes;
String routingProfile; String routingProfile;
RouteProvider.RouteService routeService; RouteProvider.RouteService routeService;
NavigationIcon navigationIcon; NavigationIcon navigationIcon;
LocationIcon locationIcon; 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 @Override
public boolean equals(Object o) { public boolean equals(Object o) {
if (this == o) return true; 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 (parent != null ? !parent.equals(that.parent) : that.parent != null) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false; if (name != null ? !name.equals(that.name) : that.name != null) return false;
if (color != that.color) 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) if (routingProfile != null ? !routingProfile.equals(that.routingProfile) : that.routingProfile != null)
return false; return false;
if (routeService != that.routeService) 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 + (parent != null ? parent.hashCode() : 0);
result = 31 * result + (name != null ? name.hashCode() : 0); result = 31 * result + (name != null ? name.hashCode() : 0);
result = 31 * result + (color != null ? color.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 + iconRes;
result = 31 * result + (routingProfile != null ? routingProfile.hashCode() : 0); result = 31 * result + (routingProfile != null ? routingProfile.hashCode() : 0);
result = 31 * result + (routeService != null ? routeService.hashCode() : 0); result = 31 * result + (routeService != null ? routeService.hashCode() : 0);

View file

@ -443,7 +443,7 @@ public class RouteParametersFragment extends BaseSettingsFragment implements OnP
}); });
builder.setNegativeButton(R.string.shared_string_cancel, null); 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); setupAngleSlider(angleValue, sliderView, nightMode, selectedModeColor);
builder.show(); builder.show();
} }

View file

@ -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) { if (!defaultSpeedOnly) {
setupSpeedSlider(SpeedSliderType.DEFAULT_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor); setupSpeedSlider(SpeedSliderType.DEFAULT_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor);
setupSpeedSlider(SpeedSliderType.MIN_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor); setupSpeedSlider(SpeedSliderType.MIN_SPEED, speedUnits, defaultValue, minValue, maxValue, min, max, seekbarView, selectedModeColor);

View file

@ -184,7 +184,7 @@ public class ContourLinesMenu {
contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder()
.setTitleId(toggleActionStringId, mapActivity) .setTitleId(toggleActionStringId, mapActivity)
.setIcon(toggleIconId) .setIcon(toggleIconId)
.setColor(toggleIconColorId) .setColor(app, toggleIconColorId)
.setListener(l) .setListener(l)
.setSelected(selected).createItem()); .setSelected(selected).createItem());
if (selected) { if (selected) {
@ -225,7 +225,7 @@ public class ContourLinesMenu {
.setTitleId(R.string.srtm_plugin_name, mapActivity) .setTitleId(R.string.srtm_plugin_name, mapActivity)
.setLayout(R.layout.list_item_icon_and_right_btn) .setLayout(R.layout.list_item_icon_and_right_btn)
.setIcon(R.drawable.ic_plugin_srtm) .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)) .setDescription(app.getString(R.string.shared_string_plugin))
.setListener(l).createItem()); .setListener(l).createItem());
} else { } else {

View file

@ -10,7 +10,6 @@ import android.widget.ArrayAdapter;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.core.content.ContextCompat;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
import net.osmand.data.LatLon; import net.osmand.data.LatLon;
@ -303,7 +302,7 @@ public class SRTMPlugin extends OsmandPlugin {
if (item != null) { if (item != null) {
item.setDescription(app.getString(R.string.display_zoom_level, item.setDescription(app.getString(R.string.display_zoom_level,
getPrefDescription(app, contourLinesProp, pref))); 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); item.setSelected(selected);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
@ -322,7 +321,7 @@ public class SRTMPlugin extends OsmandPlugin {
} }
ContextMenuItem item = adapter.getItem(position); ContextMenuItem item = adapter.getItem(position);
if (item != null) { 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); item.setSelected(selected);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }
@ -346,7 +345,7 @@ public class SRTMPlugin extends OsmandPlugin {
.setSelected(contourLinesSelected) .setSelected(contourLinesSelected)
.setIcon(R.drawable.ic_plugin_srtm) .setIcon(R.drawable.ic_plugin_srtm)
.setDescription(app.getString(R.string.display_zoom_level, descr)) .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)) .setItemDeleteAction(makeDeleteAction(settings.CONTOUR_LINES_ZOOM))
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener).createItem()); .setListener(listener).createItem());
@ -360,7 +359,7 @@ public class SRTMPlugin extends OsmandPlugin {
? R.string.shared_string_hillshade ? R.string.shared_string_hillshade
: R.string.download_slope_maps)) : R.string.download_slope_maps))
.setSelected(terrainEnabled) .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) .setIcon(R.drawable.ic_action_hillshade_dark)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setItemDeleteAction(makeDeleteAction(settings.TERRAIN, settings.TERRAIN_MODE)) .setItemDeleteAction(makeDeleteAction(settings.TERRAIN, settings.TERRAIN_MODE))
@ -473,7 +472,7 @@ public class SRTMPlugin extends OsmandPlugin {
possibleValues[j]); possibleValues[j]);
} }
int selectedModeColor = ContextCompat.getColor(app, settings.getApplicationMode().getIconColorInfo().getColor(nightMode)); int selectedModeColor = settings.getApplicationMode().getProfileColor(nightMode);
DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter( DialogListItemAdapter dialogAdapter = DialogListItemAdapter.createSingleChoiceAdapter(
possibleValuesString, nightMode, i, app, selectedModeColor, themeRes, new View.OnClickListener() { possibleValuesString, nightMode, i, app, selectedModeColor, themeRes, new View.OnClickListener() {

View file

@ -75,7 +75,6 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
private boolean nightMode; private boolean nightMode;
private boolean terrainEnabled; private boolean terrainEnabled;
private int colorProfileRes;
private int colorProfile; private int colorProfile;
private TextView downloadDescriptionTv; private TextView downloadDescriptionTv;
@ -144,8 +143,7 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
uiUtilities = app.getUIUtilities(); uiUtilities = app.getUIUtilities();
nightMode = app.getDaynightHelper().isNightModeForMapControls(); nightMode = app.getDaynightHelper().isNightModeForMapControls();
srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class); srtmPlugin = OsmandPlugin.getPlugin(SRTMPlugin.class);
colorProfileRes = settings.getApplicationMode().getIconColorInfo().getColor(nightMode); colorProfile = settings.getApplicationMode().getProfileColor(nightMode);
colorProfile = ContextCompat.getColor(app, colorProfileRes);
terrainEnabled = srtmPlugin.isTerrainLayerEnabled(); terrainEnabled = srtmPlugin.isTerrainLayerEnabled();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
} }
@ -238,7 +236,7 @@ public class TerrainFragment extends BaseOsmAndFragment implements View.OnClickL
String transparency = transparencyValue + "%"; String transparency = transparencyValue + "%";
int minZoom = Math.max(srtmPlugin.getTerrainMinZoom(), TERRAIN_MIN_ZOOM); int minZoom = Math.max(srtmPlugin.getTerrainMinZoom(), TERRAIN_MIN_ZOOM);
int maxZoom = Math.min(srtmPlugin.getTerrainMaxZoom(), TERRAIN_MAX_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); stateTv.setText(R.string.shared_string_enabled);
transparencySlider.setValue(transparencyValue); transparencySlider.setValue(transparencyValue);
transparencyValueTv.setText(transparency); transparencyValueTv.setText(transparency);

View file

@ -7,12 +7,6 @@ import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; 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 com.google.android.material.internal.FlowLayout;
import net.osmand.AndroidUtils; import net.osmand.AndroidUtils;
@ -22,6 +16,8 @@ import net.osmand.plus.R;
import net.osmand.plus.UiUtilities; import net.osmand.plus.UiUtilities;
import net.osmand.plus.activities.MapActivity; import net.osmand.plus.activities.MapActivity;
import net.osmand.plus.routepreparationmenu.cards.BaseCard; 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.plus.track.CustomColorBottomSheet.ColorPickerListener;
import net.osmand.util.Algorithms; import net.osmand.util.Algorithms;
@ -30,6 +26,11 @@ import org.apache.commons.logging.Log;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; 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 class ColorsCard extends BaseCard implements ColorPickerListener {
public static final int MAX_CUSTOM_COLORS = 6; public static final int MAX_CUSTOM_COLORS = 6;
@ -41,6 +42,9 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
private Fragment targetFragment; private Fragment targetFragment;
private ApplicationMode appMode;
private ListStringPreference colorsListPreference;
private List<Integer> colors; private List<Integer> colors;
private List<Integer> customColors; private List<Integer> customColors;
@ -51,12 +55,14 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return R.layout.colors_card; return R.layout.colors_card;
} }
public ColorsCard(MapActivity mapActivity, int selectedColor, Fragment targetFragment, List<Integer> colors) { public ColorsCard(MapActivity mapActivity, int selectedColor, Fragment targetFragment, List<Integer> colors, ListStringPreference colorsListPreference, ApplicationMode appMode) {
super(mapActivity); super(mapActivity);
this.targetFragment = targetFragment; this.targetFragment = targetFragment;
this.selectedColor = selectedColor; this.selectedColor = selectedColor;
this.colors = colors; this.colors = colors;
customColors = getCustomColors(app); this.colorsListPreference = colorsListPreference;
this.customColors = getCustomColors(colorsListPreference, appMode);
this.appMode = appMode;
} }
public int getSelectedColor() { public int getSelectedColor() {
@ -215,9 +221,18 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return app.getUIUtilities().getPaintedIcon(R.drawable.ic_bg_transparency, transparencyColor); return app.getUIUtilities().getPaintedIcon(R.drawable.ic_bg_transparency, transparencyColor);
} }
public static List<Integer> getCustomColors(@NonNull OsmandApplication app) { public static List<Integer> getCustomColors(ListStringPreference colorsListPreference) {
return getCustomColors(colorsListPreference, null);
}
public static List<Integer> getCustomColors(ListStringPreference colorsListPreference, ApplicationMode appMode) {
List<Integer> colors = new ArrayList<>(); List<Integer> colors = new ArrayList<>();
List<String> colorNames = app.getSettings().CUSTOM_TRACK_COLORS.getStringsList(); List<String> colorNames;
if (appMode == null) {
colorNames = colorsListPreference.getStringsList();
} else {
colorNames = colorsListPreference.getStringsListForProfile(appMode);
}
if (colorNames != null) { if (colorNames != null) {
for (String colorHex : colorNames) { for (String colorHex : colorNames) {
try { try {
@ -233,12 +248,24 @@ public class ColorsCard extends BaseCard implements ColorPickerListener {
return colors; return colors;
} }
public int getIndexOfSelectedColor() {
return customColors.indexOf(selectedColor);
}
public boolean isBaseColor(int color) {
return colors.contains(color);
}
private void saveCustomColors() { private void saveCustomColors() {
List<String> colorNames = new ArrayList<>(); List<String> colorNames = new ArrayList<>();
for (Integer color : customColors) { for (Integer color : customColors) {
String colorHex = Algorithms.colorToString(color); String colorHex = Algorithms.colorToString(color);
colorNames.add(colorHex); colorNames.add(colorHex);
} }
app.getSettings().CUSTOM_TRACK_COLORS.setStringsList(colorNames); if (appMode == null) {
colorsListPreference.setStringsList(colorNames);
} else {
colorsListPreference.setStringsListForProfile(appMode, colorNames);
}
} }
} }

View file

@ -360,7 +360,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
@Override @Override
public void onColorSelected(Integer prevColor, int newColor) { public void onColorSelected(Integer prevColor, int newColor) {
if (prevColor != null) { if (prevColor != null) {
List<Integer> customColors = ColorsCard.getCustomColors(app); List<Integer> customColors = ColorsCard.getCustomColors(app.getSettings().CUSTOM_TRACK_COLORS);
int index = customColors.indexOf(prevColor); int index = customColors.indexOf(prevColor);
if (index != ColorsCard.INVALID_VALUE) { if (index != ColorsCard.INVALID_VALUE) {
saveCustomColorsToTracks(prevColor, newColor); saveCustomColorsToTracks(prevColor, newColor);
@ -670,7 +670,7 @@ public class TrackAppearanceFragment extends ContextMenuScrollFragment implement
MapActivity mapActivity = getMapActivity(); MapActivity mapActivity = getMapActivity();
if (mapActivity != null) { if (mapActivity != null) {
List<Integer> colors = getTrackColors(); List<Integer> 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); colorsCard.setListener(this);
cardsContainer.addView(colorsCard.build(mapActivity)); cardsContainer.addView(colorsCard.build(mapActivity));
} }

View file

@ -80,8 +80,7 @@ public class TransportLinesMenu {
final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls(); final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
final Context themedCtx = UiUtilities.getThemedContext(mapActivity, nightMode); final Context themedCtx = UiUtilities.getThemedContext(mapActivity, nightMode);
final int profileColorResId = appMode.getIconColorInfo().getColor(nightMode); final int profileColor = appMode.getProfileColor(nightMode);
final int profileColor = ContextCompat.getColor(themedCtx, profileColorResId);
final AlertDialog.Builder b = new AlertDialog.Builder(themedCtx); final AlertDialog.Builder b = new AlertDialog.Builder(themedCtx);
b.setTitle(themedCtx.getString(R.string.rendering_category_transport)); b.setTitle(themedCtx.getString(R.string.rendering_category_transport));
@ -123,7 +122,7 @@ public class TransportLinesMenu {
View v = super.getView(position, convertView, parent); View v = super.getView(position, convertView, parent);
final ImageView icon = (ImageView) v.findViewById(R.id.icon); final ImageView icon = (ImageView) v.findViewById(R.id.icon);
if (checkedItems[position]) { if (checkedItems[position]) {
icon.setImageDrawable(app.getUIUtilities().getIcon(iconIds[position], profileColorResId)); icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconIds[position], profileColor));
} else { } else {
icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position])); icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position]));
} }
@ -138,7 +137,7 @@ public class TransportLinesMenu {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
checkedItems[position] = isChecked; checkedItems[position] = isChecked;
if (checkedItems[position]) { if (checkedItems[position]) {
icon.setImageDrawable(app.getUIUtilities().getIcon(iconIds[position], profileColorResId)); icon.setImageDrawable(app.getUIUtilities().getPaintedIcon(iconIds[position], profileColor));
} else { } else {
icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position])); icon.setImageDrawable(app.getUIUtilities().getThemedIcon(iconIds[position]));
} }

View file

@ -20,6 +20,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
@ -888,7 +889,7 @@ public class MapControlsLayer extends OsmandMapLayer {
compassHud.updateVisibility(!forceHideCompass && shouldShowCompass()); compassHud.updateVisibility(!forceHideCompass && shouldShowCompass());
ApplicationMode appMode = settings.getApplicationMode(); ApplicationMode appMode = settings.getApplicationMode();
layersHud.setIconColorId(appMode.getIconColorInfo().getColor(isNight)); layersHud.setIconColor(appMode.getProfileColor(isNight));
if (layersHud.setIconResId(appMode.getIconRes())) { if (layersHud.setIconResId(appMode.getIconRes())) {
layersHud.update(app, isNight); layersHud.update(app, isNight);
} }
@ -1095,8 +1096,7 @@ public class MapControlsLayer extends OsmandMapLayer {
transparencyBarLayout.setVisibility(View.GONE); transparencyBarLayout.setVisibility(View.GONE);
} }
boolean nightMode = app.getDaynightHelper().isNightModeForMapControls(); boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
int selectedModeColor = ContextCompat.getColor(app, int selectedModeColor = appMode.getProfileColor(nightMode);
appMode.getIconColorInfo().getColor(nightMode));
UiUtilities.setupSlider(transparencySlider, nightMode, selectedModeColor); UiUtilities.setupSlider(transparencySlider, nightMode, selectedModeColor);
} }
@ -1115,6 +1115,10 @@ public class MapControlsLayer extends OsmandMapLayer {
private int resDarkId; private int resDarkId;
private int resClrLight = R.color.map_button_icon_color_light; private int resClrLight = R.color.map_button_icon_color_light;
private int resClrDark = R.color.map_button_icon_color_dark; private int resClrDark = R.color.map_button_icon_color_dark;
@ColorInt
private Integer clrIntLight = null;
@ColorInt
private Integer clrIntDark = null;
private String id; private String id;
private boolean flipIconForRtl; private boolean flipIconForRtl;
@ -1223,11 +1227,14 @@ public class MapControlsLayer extends OsmandMapLayer {
} }
public boolean resetIconColors() { 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; return false;
} }
resClrLight = R.color.map_button_icon_color_light; resClrLight = R.color.map_button_icon_color_light;
resClrDark = R.color.map_button_icon_color_dark; resClrDark = R.color.map_button_icon_color_dark;
clrIntLight = null;
clrIntDark = null;
f = true; f = true;
return true; return true;
} }
@ -1242,6 +1249,16 @@ public class MapControlsLayer extends OsmandMapLayer {
return this; 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) { public MapHudButton setIconsId(int icnLight, int icnDark) {
if (resLightId == icnLight && resDarkId == icnDark) { if (resLightId == icnLight && resDarkId == icnDark) {
return this; return this;
@ -1262,6 +1279,17 @@ public class MapControlsLayer extends OsmandMapLayer {
return this; 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") @SuppressLint("NewApi")
@SuppressWarnings("deprecation") @SuppressWarnings("deprecation")
public void update(OsmandApplication ctx, boolean night) { public void update(OsmandApplication ctx, boolean night) {
@ -1283,7 +1311,11 @@ public class MapControlsLayer extends OsmandMapLayer {
} else if (resLightId != 0 && !nightMode) { } else if (resLightId != 0 && !nightMode) {
d = ctx.getUIUtilities().getIcon(resLightId); d = ctx.getUIUtilities().getIcon(resLightId);
} else if (resId != 0) { } else if (resId != 0) {
if (clrIntLight != null && clrIntDark != null) {
d = ctx.getUIUtilities().getPaintedIcon(resId, nightMode ? clrIntDark : clrIntLight);
} else {
d = ctx.getUIUtilities().getIcon(resId, nightMode ? resClrDark : resClrLight); d = ctx.getUIUtilities().getIcon(resId, nightMode ? resClrDark : resClrLight);
}
if (flipIconForRtl) { if (flipIconForRtl) {
d = AndroidUtils.getDrawableForDirection(ctx, d); d = AndroidUtils.getDrawableForDirection(ctx, d);
} }

View file

@ -1,5 +1,6 @@
package net.osmand.plus.views.layers; package net.osmand.plus.views.layers;
import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.Canvas; import android.graphics.Canvas;
@ -11,6 +12,7 @@ import android.graphics.PorterDuffColorFilter;
import android.graphics.RectF; import android.graphics.RectF;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
import androidx.annotation.ColorInt;
import androidx.appcompat.content.res.AppCompatResources; import androidx.appcompat.content.res.AppCompatResources;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat; import androidx.core.graphics.drawable.DrawableCompat;
@ -48,7 +50,8 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
private OsmandMapTileView view; private OsmandMapTileView view;
private ApplicationMode appMode; private ApplicationMode appMode;
private int colorId; @ColorInt
private int color;
private LayerDrawable navigationIcon; private LayerDrawable navigationIcon;
private int navigationIconId; private int navigationIconId;
private LayerDrawable locationIcon; private LayerDrawable locationIcon;
@ -160,30 +163,32 @@ public class PointLocationLayer extends OsmandMapLayer implements ContextMenuLay
} }
private void updateIcons(ApplicationMode appMode, boolean nighMode, boolean locationOutdated) { 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 locationIconId = appMode.getLocationIcon().getIconId();
int navigationIconId = appMode.getNavigationIcon().getIconId(); int navigationIconId = appMode.getNavigationIcon().getIconId();
int headingIconId = appMode.getLocationIcon().getHeadingIconId(); int headingIconId = appMode.getLocationIcon().getHeadingIconId();
if (appMode != this.appMode || this.nm != nighMode || this.locationOutdated != locationOutdated if (appMode != this.appMode || this.nm != nighMode || this.locationOutdated != locationOutdated
|| this.colorId != colorId || this.color != color
|| this.locationIconId != locationIconId || this.locationIconId != locationIconId
|| this.headingIconId != headingIconId || this.headingIconId != headingIconId
|| this.navigationIconId != navigationIconId) { || this.navigationIconId != navigationIconId) {
this.appMode = appMode; this.appMode = appMode;
this.colorId = colorId; this.color = color;
this.nm = nighMode; this.nm = nighMode;
this.locationOutdated = locationOutdated; this.locationOutdated = locationOutdated;
this.locationIconId = locationIconId; this.locationIconId = locationIconId;
this.headingIconId = headingIconId; this.headingIconId = headingIconId;
this.navigationIconId = navigationIconId; this.navigationIconId = navigationIconId;
int color = ContextCompat.getColor(view.getContext(), colorId); navigationIcon = (LayerDrawable) AppCompatResources.getDrawable(ctx, navigationIconId);
navigationIcon = (LayerDrawable) AppCompatResources.getDrawable(view.getContext(), navigationIconId);
if (navigationIcon != null) { if (navigationIcon != null) {
DrawableCompat.setTint(navigationIcon.getDrawable(1), color); DrawableCompat.setTint(navigationIcon.getDrawable(1), color);
} }
headingIcon = BitmapFactory.decodeResource(view.getResources(), headingIconId); headingIcon = BitmapFactory.decodeResource(view.getResources(), headingIconId);
headingPaint.setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC_IN)); 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) { if (locationIcon != null) {
DrawableCompat.setTint(DrawableCompat.wrap(locationIcon.getDrawable(1)), color); DrawableCompat.setTint(DrawableCompat.wrap(locationIcon.getDrawable(1)), color);
} }

View file

@ -9,7 +9,6 @@ import android.widget.LinearLayout;
import androidx.annotation.DrawableRes; import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.StringRes; import androidx.annotation.StringRes;
import androidx.core.content.ContextCompat;
import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.settings.backend.ApplicationMode;
import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuAdapter;
@ -468,7 +467,7 @@ public class MapWidgetRegistry {
.setTitleId(R.string.configure_screen_quick_action, mapActivity) .setTitleId(R.string.configure_screen_quick_action, mapActivity)
.setIcon(R.drawable.ic_quick_action) .setIcon(R.drawable.ic_quick_action)
.setSelected(selected) .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) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(new ContextMenuAdapter.OnRowItemClick() { .setListener(new ContextMenuAdapter.OnRowItemClick() {
@Override @Override
@ -504,7 +503,7 @@ public class MapWidgetRegistry {
} }
ContextMenuItem item = adapter.getItem(position); ContextMenuItem item = adapter.getItem(position);
item.setSelected(visible); 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(); adapter.notifyDataSetChanged();
} }
@ -522,12 +521,11 @@ public class MapWidgetRegistry {
final boolean selected = r.visibleCollapsed(mode) || r.visible(mode); final boolean selected = r.visibleCollapsed(mode) || r.visible(mode);
final String desc = mapActivity.getString(R.string.shared_string_collapse); final String desc = mapActivity.getString(R.string.shared_string_collapse);
final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls(); final boolean nightMode = app.getDaynightHelper().isNightModeForMapControls();
final int currentModeColorRes = mode.getIconColorInfo().getColor(nightMode); final int currentModeColor = mode.getProfileColor(nightMode);
final int currentModeColor = ContextCompat.getColor(app, currentModeColorRes);
ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder() ContextMenuItem.ItemBuilder itemBuilder = new ContextMenuItem.ItemBuilder()
.setIcon(r.getDrawableMenu()) .setIcon(r.getDrawableMenu())
.setSelected(selected) .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) .setSecondaryIcon(r.widget != null ? R.drawable.ic_action_additional_option : ContextMenuItem.INVALID_ID)
.setDescription(r.visibleCollapsed(mode) ? desc : null) .setDescription(r.visibleCollapsed(mode) ? desc : null)
.setListener(new ContextMenuAdapter.OnRowItemClick() { .setListener(new ContextMenuAdapter.OnRowItemClick() {
@ -557,7 +555,7 @@ public class MapWidgetRegistry {
final int id = menuItemIds[i]; final int id = menuItemIds[i];
boolean isChecked = id == checkedId; boolean isChecked = id == checkedId;
String title = app.getString(titleId); 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) items.add(new PopUpMenuItem.Builder(app)
.setTitle(title) .setTitle(title)
.setIcon(icon) .setIcon(icon)
@ -646,7 +644,7 @@ public class MapWidgetRegistry {
} }
ContextMenuItem item = adapter.getItem(position); ContextMenuItem item = adapter.getItem(position);
item.setSelected(visible); 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); item.setDescription(visible && collapsed ? desc : null);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
} }

View file

@ -71,7 +71,7 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
public void createMenuItems(Bundle savedInstanceState) { public void createMenuItems(Bundle savedInstanceState) {
final int activeColorResId = nightMode ? final int activeColorResId = nightMode ?
R.color.active_color_primary_dark : R.color.active_color_primary_light; 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 contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding);
final int contentPaddingSmall = app.getResources().getDimensionPixelSize(R.dimen.content_padding_small); 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]; final BottomSheetItemWithCompoundButton[] btnSelectAll = new BottomSheetItemWithCompoundButton[1];
btnSelectAll[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() btnSelectAll[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder()
.setChecked(this.isGlobalWikiPoiEnabled) .setChecked(this.isGlobalWikiPoiEnabled)
.setCompoundButtonColorId(profileColorResId) .setCompoundButtonColor(profileColor)
.setTitle(getString(R.string.shared_string_all_languages)) .setTitle(getString(R.string.shared_string_all_languages))
.setTitleColorId(activeColorResId) .setTitleColorId(activeColorResId)
.setCustomView(getCustomButtonView()) .setCustomView(getCustomButtonView())
@ -174,15 +174,15 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
int disableColorId = nightMode ? int disableColorId = nightMode ?
R.color.active_buttons_and_links_text_disabled_dark : R.color.active_buttons_and_links_text_disabled_dark :
R.color.active_buttons_and_links_text_disabled_light; 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) { for (BottomSheetItemWithCompoundButton item : languageItems) {
item.getView().setEnabled(enable); item.getView().setEnabled(enable);
item.setTitleColorId(enable ? textColorPrimaryId : disableColorId); item.setTitleColorId(enable ? textColorPrimaryId : disableColorId);
CompoundButton cb = item.getCompoundButton(); CompoundButton cb = item.getCompoundButton();
if (cb != null) { if (cb != null) {
cb.setEnabled(enable); cb.setEnabled(enable);
UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app, enable ? UiUtilities.setupCompoundButton(nightMode, enable ? profileColor : disableColor, cb);
profileColorId : disableColorId), cb);
} }
} }
} }
@ -254,7 +254,7 @@ public class SelectWikiLanguagesBottomSheet extends MenuBottomSheetDialogFragmen
Drawable bgDrawable = app.getUIUtilities().getPaintedIcon(bgResId, bgColor); Drawable bgDrawable = app.getUIUtilities().getPaintedIcon(bgResId, bgColor);
AndroidUtils.setBackground(buttonView, bgDrawable); AndroidUtils.setBackground(buttonView, bgDrawable);
int selectedModeColorId = appMode.getIconColorInfo().getColor(nightMode); int selectedModeColorId = appMode.getProfileColor(nightMode);
UiUtilities.setupCompoundButton(nightMode, selectedModeColorId, cb); UiUtilities.setupCompoundButton(nightMode, selectedModeColorId, cb);
return buttonView; return buttonView;

View file

@ -141,7 +141,7 @@ public class WikipediaPlugin extends OsmandPlugin {
ContextMenuItem item = adapter.getItem(pos); ContextMenuItem item = adapter.getItem(pos);
if (item != null) { if (item != null) {
item.setSelected(selected); item.setSelected(selected);
item.setColorRes(selected ? item.setColor(app, selected ?
R.color.osmand_orange : ContextMenuItem.INVALID_ID); R.color.osmand_orange : ContextMenuItem.INVALID_ID);
item.setDescription(selected ? getLanguagesSummary() : null); item.setDescription(selected ? getLanguagesSummary() : null);
adapter.notifyDataSetChanged(); adapter.notifyDataSetChanged();
@ -160,7 +160,7 @@ public class WikipediaPlugin extends OsmandPlugin {
.setTitleId(R.string.shared_string_wikipedia, mapActivity) .setTitleId(R.string.shared_string_wikipedia, mapActivity)
.setDescription(selected ? getLanguagesSummary() : null) .setDescription(selected ? getLanguagesSummary() : null)
.setSelected(selected) .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) .setIcon(R.drawable.ic_plugin_wikipedia)
.setSecondaryIcon(R.drawable.ic_action_additional_option) .setSecondaryIcon(R.drawable.ic_action_additional_option)
.setListener(listener).createItem()); .setListener(listener).createItem());

View file

@ -74,7 +74,7 @@ public class WikipediaPoiMenu {
.setTitleId(toggleActionStringId, mapActivity) .setTitleId(toggleActionStringId, mapActivity)
.setDescription(summary) .setDescription(summary)
.setIcon(toggleIconId) .setIcon(toggleIconId)
.setColor(toggleIconColorId) .setColor(app, toggleIconColorId)
.setListener(l) .setListener(l)
.setSelected(enabled).createItem()); .setSelected(enabled).createItem());