From b0bb03fa8f71b127e452644845ad50d22d09c721 Mon Sep 17 00:00:00 2001 From: cepprice Date: Tue, 23 Feb 2021 22:13:48 +0500 Subject: [PATCH] The rest custom color implementations --- OsmAnd/src/net/osmand/AndroidUtils.java | 37 ++++++++++++++++ .../net/osmand/plus/ContextMenuAdapter.java | 44 ++++++++++++------- .../src/net/osmand/plus/ContextMenuItem.java | 18 +++++++- .../plus/activities/MapActivityActions.java | 6 +-- .../plus/base/BottomSheetDialogFragment.java | 11 +++++ .../BottomSheetItemWithCompoundButton.java | 16 ++++++- .../plus/dialogs/DetailsBottomSheet.java | 6 +-- .../SelectMapViewQuickActionsBottomSheet.java | 4 +- .../OptionsBottomSheetDialogFragment.java | 2 +- ...electedPointBottomSheetDialogFragment.java | 2 +- .../EditTrackGroupDialogFragment.java | 2 +- .../plus/profiles/AppProfileArrayAdapter.java | 2 +- .../profiles/ConfigureProfileMenuAdapter.java | 13 +++--- .../plus/profiles/EditProfilesFragment.java | 13 +++--- .../OnlineRoutingEngineDataObject.java | 2 +- .../plus/profiles/ProfileDataObject.java | 17 ++++--- .../plus/profiles/ProfileDataUtils.java | 2 +- .../plus/profiles/ProfileIconColors.java | 1 + .../profiles/RoutingProfileDataObject.java | 2 +- .../SelectMultipleProfilesBottomSheet.java | 7 +-- .../profiles/SelectProfileBottomSheet.java | 5 ++- .../profiles/SelectProfileMenuAdapter.java | 31 +++++++------ .../plus/quickaction/SwitchableAction.java | 13 +++--- .../actions/SwitchProfileAction.java | 8 ++-- .../AvoidRoadsBottomSheetDialogFragment.java | 8 ++++ .../RouteOptionsBottomSheet.java | 22 +++++----- .../settings/backend/ApplicationMode.java | 33 ++++++++------ .../plus/settings/backend/OsmandSettings.java | 2 +- .../backend/backup/ProfileSettingsItem.java | 1 + .../BooleanPreferenceBottomSheet.java | 5 +-- .../ElevationDateBottomSheet.java | 6 ++- .../MultiSelectPreferencesBottomSheet.java | 2 +- ...ecalculateRouteInDeviationBottomSheet.java | 2 +- .../ResetProfilePrefsBottomSheet.java | 6 +-- .../SingleSelectPreferenceBottomSheet.java | 8 +++- .../fragments/BaseSettingsFragment.java | 14 +++--- .../fragments/DuplicatesSettingsAdapter.java | 7 ++- .../fragments/ExportItemsBottomSheet.java | 5 ++- .../fragments/ProfileAppearanceFragment.java | 31 ++++++------- .../plus/views/layers/MapControlsLayer.java | 39 ++++++++++++++-- .../plus/views/layers/PointLocationLayer.java | 19 +++++--- .../SelectWikiLanguagesBottomSheet.java | 12 ++--- 42 files changed, 329 insertions(+), 157 deletions(-) diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java index 545e7b7391..298032704d 100644 --- a/OsmAnd/src/net/osmand/AndroidUtils.java +++ b/OsmAnd/src/net/osmand/AndroidUtils.java @@ -333,6 +333,43 @@ public class AndroidUtils { ); } + public static ColorStateList createCheckedColorIntStateList(@ColorInt int normal, @ColorInt int checked) { + return createCheckedColorIntStateList(false, normal, checked, 0, 0); + } + + public static ColorStateList createCheckedColorIntStateList(boolean night, + @ColorInt int lightNormal, @ColorInt int lightChecked, + @ColorInt int darkNormal, @ColorInt int darkChecked) { + return createColorIntStateList(night, android.R.attr.state_checked, + lightNormal, lightChecked, darkNormal, darkChecked); + } + + public static ColorStateList createEnabledColorIntStateList(@ColorInt int normal, @ColorInt int pressed) { + return createEnabledColorIntStateList(false, normal, pressed, 0, 0); + } + + public static ColorStateList createEnabledColorIntStateList(boolean night, + @ColorInt int lightNormal, @ColorInt int lightPressed, + @ColorInt int darkNormal, @ColorInt int darkPressed) { + return createColorIntStateList(night, android.R.attr.state_enabled, + lightNormal, lightPressed, darkNormal, darkPressed); + } + + private static ColorStateList createColorIntStateList(boolean night, int state, + @ColorInt int lightNormal, @ColorInt int lightState, + @ColorInt int darkNormal, @ColorInt int darkState) { + return new ColorStateList( + new int[][]{ + new int[]{state}, + new int[]{} + }, + new int[]{ + night ? darkState : lightState, + night ? darkNormal : lightNormal + } + ); + } + public static StateListDrawable createCheckedStateListDrawable(Drawable normal, Drawable checked) { return createStateListDrawable(normal, checked, android.R.attr.state_checked); } diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java index 381125e0ec..12eec8af31 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuAdapter.java @@ -249,8 +249,7 @@ public class ContextMenuAdapter { final ContextMenuItem item = getItem(position); int layoutId = item.getLayout(); layoutId = layoutId != ContextMenuItem.INVALID_ID ? layoutId : DEFAULT_LAYOUT_ID; - int currentModeColorRes = app.getSettings().getApplicationMode().getIconColorInfo().getColor(nightMode); - int currentModeColor = ContextCompat.getColor(app, currentModeColorRes); + int currentModeColor = app.getSettings().getApplicationMode().getProfileColor(nightMode); if (layoutId == R.layout.mode_toggles) { final Set selected = new LinkedHashSet<>(); return AppModeDialog.prepareAppModeDrawerView((Activity) getContext(), @@ -278,15 +277,20 @@ public class ContextMenuAdapter { } if (layoutId == R.layout.main_menu_drawer_btn_switch_profile || layoutId == R.layout.main_menu_drawer_btn_configure_profile) { - int colorResId = item.getColorRes(); - int colorNoAlpha = ContextCompat.getColor(app, colorResId); + int colorNoAlpha; + if (item.getColor() != null) { + colorNoAlpha = item.getColor(); + } else { + int colorResId = item.getColorRes(); + colorNoAlpha = ContextCompat.getColor(app, colorResId); + } TextView title = convertView.findViewById(R.id.title); title.setText(item.getTitle()); if (layoutId == R.layout.main_menu_drawer_btn_switch_profile) { ImageView icon = convertView.findViewById(R.id.icon); - icon.setImageDrawable(mIconsCache.getIcon(item.getIcon(), colorResId)); + icon.setImageDrawable(mIconsCache.getPaintedIcon(item.getIcon(), colorNoAlpha)); ImageView icArrow = convertView.findViewById(R.id.ic_expand_list); icArrow.setImageDrawable(mIconsCache.getIcon(item.getSecondaryIcon())); TextView desc = convertView.findViewById(R.id.description); @@ -309,8 +313,13 @@ public class ContextMenuAdapter { int tag = item.getTag(); - int colorResId = item.getColorRes(); - int colorNoAlpha = ContextCompat.getColor(app, colorResId); + int colorNoAlpha; + if (item.getColor() != null) { + colorNoAlpha = item.getColor(); + } else { + int colorResId = item.getColorRes(); + colorNoAlpha = ContextCompat.getColor(app, colorResId); + } TextView title = convertView.findViewById(R.id.title); TextView desc = convertView.findViewById(R.id.description); ImageView icon = convertView.findViewById(R.id.icon); @@ -331,7 +340,7 @@ public class ContextMenuAdapter { AndroidUiHelper.updateVisibility(icon, true); AndroidUiHelper.updateVisibility(desc, true); AndroidUtils.setTextPrimaryColor(app, title, nightMode); - icon.setImageDrawable(mIconsCache.getIcon(item.getIcon(), colorResId)); + icon.setImageDrawable(mIconsCache.getPaintedIcon(item.getIcon(), colorNoAlpha)); desc.setText(item.getDescription()); boolean selectedMode = tag == PROFILES_CHOSEN_PROFILE_TAG; if (selectedMode) { @@ -420,16 +429,19 @@ public class ContextMenuAdapter { } else { if (item.getIcon() != ContextMenuItem.INVALID_ID) { int colorRes = item.getColorRes(); - if (colorRes == ContextMenuItem.INVALID_ID) { - if (!item.shouldSkipPainting()) { - colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark; - } else { - colorRes = 0; + Drawable drawable; + if (profileDependent) { + drawable = mIconsCache.getPaintedIcon(item.getIcon(), currentModeColor); + } else { + if (colorRes == ContextMenuItem.INVALID_ID) { + if (!item.shouldSkipPainting()) { + colorRes = lightTheme ? R.color.icon_color_default_light : R.color.icon_color_default_dark; + } else { + colorRes = 0; + } } - } else if (profileDependent) { - colorRes = currentModeColorRes; + drawable = mIconsCache.getIcon(item.getIcon(), colorRes); } - final Drawable drawable = mIconsCache.getIcon(item.getIcon(), colorRes); ((AppCompatImageView) convertView.findViewById(R.id.icon)).setImageDrawable(drawable); convertView.findViewById(R.id.icon).setVisibility(View.VISIBLE); } else if (convertView.findViewById(R.id.icon) != null) { diff --git a/OsmAnd/src/net/osmand/plus/ContextMenuItem.java b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java index 3718169532..a4b846613d 100644 --- a/OsmAnd/src/net/osmand/plus/ContextMenuItem.java +++ b/OsmAnd/src/net/osmand/plus/ContextMenuItem.java @@ -21,6 +21,8 @@ public class ContextMenuItem { private int mIcon; @ColorRes private int colorRes; + @ColorInt + private Integer color; @DrawableRes private int secondaryIcon; private Boolean selected; @@ -49,6 +51,7 @@ public class ContextMenuItem { String title, @DrawableRes int icon, @ColorRes int colorRes, + @ColorInt Integer color, @DrawableRes int secondaryIcon, Boolean selected, int progress, @@ -73,6 +76,7 @@ public class ContextMenuItem { this.title = title; this.mIcon = icon; this.colorRes = colorRes; + this.color = color; this.secondaryIcon = secondaryIcon; this.selected = selected; this.progress = progress; @@ -114,6 +118,11 @@ public class ContextMenuItem { return colorRes; } + @ColorInt + Integer getColor() { + return color; + } + @ColorRes public int getThemedColorRes(Context context) { if (skipPaintingWithoutColor || getColorRes() != INVALID_ID) { @@ -270,6 +279,8 @@ public class ContextMenuItem { private int mIcon = INVALID_ID; @ColorRes private int mColorRes = INVALID_ID; + @ColorInt + private Integer mColor = null; @DrawableRes private int mSecondaryIcon = INVALID_ID; private Boolean mSelected = null; @@ -312,6 +323,11 @@ public class ContextMenuItem { return this; } + public ItemBuilder setColorInt(@ColorInt int color) { + mColor = color; + return this; + } + public ItemBuilder setIcon(@DrawableRes int icon) { mIcon = icon; return this; @@ -422,7 +438,7 @@ public class ContextMenuItem { } public ContextMenuItem createItem() { - ContextMenuItem item = new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mSecondaryIcon, + ContextMenuItem item = new ContextMenuItem(mTitleId, mTitle, mIcon, mColorRes, mColor, mSecondaryIcon, mSelected, mProgress, mLayout, mLoading, mIsCategory, mIsClickable, mSkipPaintingWithoutColor, mOrder, mDescription, mOnUpdateCallback, mItemClickListener, mIntegerListener, mProgressListener, mItemDeleteAction, mHideDivider, mHideCompoundButton, mMinHeight, mTag, mId); diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java index 258ed7be38..acc557ed09 100644 --- a/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java +++ b/OsmAnd/src/net/osmand/plus/activities/MapActivityActions.java @@ -749,7 +749,7 @@ public class MapActivityActions implements DialogProvider { optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.profile_list_item) .setIcon(appMode.getIconRes()) - .setColor(appMode.getIconColorInfo().getColor(nightMode)) + .setColorInt(appMode.getProfileColor(nightMode)) .setTag(tag) .setTitle(appMode.toHumanString()) .setDescription(modeDescription) @@ -1059,7 +1059,7 @@ public class MapActivityActions implements DialogProvider { .setId(DRAWER_SWITCH_PROFILE_ID) .setIcon(currentMode.getIconRes()) .setSecondaryIcon(icArrowResId) - .setColor(currentMode.getIconColorInfo().getColor(nightMode)) + .setColorInt(currentMode.getProfileColor(nightMode)) .setTitle(currentMode.toHumanString()) .setDescription(modeDescription) .setListener(new ItemClickListener() { @@ -1073,7 +1073,7 @@ public class MapActivityActions implements DialogProvider { .createItem()); optionsMenuHelper.addItem(new ItemBuilder().setLayout(R.layout.main_menu_drawer_btn_configure_profile) .setId(DRAWER_CONFIGURE_PROFILE_ID) - .setColor(currentMode.getIconColorInfo().getColor(nightMode)) + .setColorInt(currentMode.getProfileColor(nightMode)) .setTitle(getString(R.string.configure_profile)) .setListener(new ItemClickListener() { @Override diff --git a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java index c33b183b65..4a9924fd0e 100644 --- a/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/base/BottomSheetDialogFragment.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.Window; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; @@ -91,6 +92,16 @@ public abstract class BottomSheetDialogFragment extends DialogFragment { } } + @Nullable + protected Drawable getPaintedIcon(@DrawableRes int drawableRes, @ColorInt int color) { + OsmandApplication app = getMyApplication(); + if (app != null) { + return app.getUIUtilities().getPaintedIcon(drawableRes, color); + } else { + return null; + } + } + @Nullable protected Drawable getContentIcon(@DrawableRes int drawableRes) { OsmandApplication app = getMyApplication(); diff --git a/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java b/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java index 10fa8a461e..a8c508433e 100644 --- a/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java +++ b/OsmAnd/src/net/osmand/plus/base/bottomsheetmenu/BottomSheetItemWithCompoundButton.java @@ -8,6 +8,7 @@ import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.LayoutRes; import androidx.core.content.ContextCompat; @@ -22,6 +23,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri private ColorStateList buttonTintList; private OnCheckedChangeListener onCheckedChangeListener; @ColorRes private int compoundButtonColorId; + @ColorInt private Integer compoundButtonColor; private CompoundButton compoundButton; @@ -80,6 +82,10 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri this.compoundButtonColorId = compoundButtonColorId; } + public void setCompoundButtonColor(@ColorInt int compoundButtonColor) { + this.compoundButtonColor = compoundButtonColor; + } + public CompoundButton getCompoundButton() { return compoundButton; } @@ -91,7 +97,9 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri if (compoundButton != null) { compoundButton.setChecked(checked); compoundButton.setOnCheckedChangeListener(onCheckedChangeListener); - if (compoundButtonColorId != INVALID_ID) { + if (compoundButtonColor != null) { + UiUtilities.setupCompoundButton(nightMode, compoundButtonColor, compoundButton); + } else if (compoundButtonColorId != INVALID_ID) { UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(context, compoundButtonColorId), compoundButton); } else { CompoundButtonCompat.setButtonTintList(compoundButton, buttonTintList); @@ -105,6 +113,7 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri protected ColorStateList buttonTintList; protected OnCheckedChangeListener onCheckedChangeListener; @ColorRes protected int compoundButtonColorId = INVALID_ID; + @ColorInt protected Integer compoundButtonColor = null; public Builder setChecked(boolean checked) { this.checked = checked; @@ -125,6 +134,11 @@ public class BottomSheetItemWithCompoundButton extends BottomSheetItemWithDescri this.compoundButtonColorId = compoundButtonColorId; return this; } + + public Builder setCompoundButtonColor(@ColorInt int compoundButtonColor) { + this.compoundButtonColor = compoundButtonColor; + return this; + } public BottomSheetItemWithCompoundButton create() { return new BottomSheetItemWithCompoundButton(customView, diff --git a/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java b/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java index 673f1ce3e7..b80acfedb0 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/DetailsBottomSheet.java @@ -98,7 +98,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet { @Override public void createMenuItems(Bundle savedInstanceState) { - int selectedProfileColorRes = app.getSettings().APPLICATION_MODE.get().getIconColorInfo().getColor(nightMode); + int selectedProfileColor = app.getSettings().APPLICATION_MODE.get().getProfileColor(nightMode); float spacing = getResources().getDimension(R.dimen.line_spacing_extra_description); LinearLayout linearLayout = new LinearLayout(app); linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); @@ -139,7 +139,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet { streetLightsNightPref.set(!onLeftClick); } }) - .setCompoundButtonColorId(selectedProfileColorRes) + .setCompoundButtonColor(selectedProfileColor) .setChecked(pref.get()) .setTitle(propertyName) .setIconHidden(true) @@ -160,7 +160,7 @@ public class DetailsBottomSheet extends BasePreferenceBottomSheet { } else if (!STREET_LIGHTING_NIGHT.equals(property.getAttrName())) { final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(selectedProfileColorRes) + .setCompoundButtonColor(selectedProfileColor) .setChecked(pref.get()) .setTitle(propertyName) .setIconHidden(true) diff --git a/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java b/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java index 4c5f199824..5b7ba9cc9e 100644 --- a/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/dialogs/SelectMapViewQuickActionsBottomSheet.java @@ -174,8 +174,8 @@ public class SelectMapViewQuickActionsBottomSheet extends MenuBottomSheetDialogF if (appMode != null) { boolean selected = key.equals(selectedItem); int iconId = appMode.getIconRes(); - int colorId = appMode.getIconColorInfo().getColor(nightMode); - Drawable icon = getIcon(iconId, colorId); + int color = appMode.getProfileColor(nightMode); + Drawable icon = getPaintedIcon(iconId, color); String translatedName = appMode.toHumanString(); createItemRow(selected, counter, icon, translatedName, key); counter++; diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java index 35397f269e..8c8eacee67 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/OptionsBottomSheetDialogFragment.java @@ -55,7 +55,7 @@ public class OptionsBottomSheetDialogFragment extends MenuBottomSheetDialogFragm icon = getContentIcon(R.drawable.ic_action_split_interval); } else { description = routeAppMode.toHumanString(); - icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode)); + icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode)); } } else { description = getString(R.string.shared_string_undefined); diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java index b18592edb8..d482299931 100644 --- a/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/measurementtool/SelectedPointBottomSheetDialogFragment.java @@ -403,7 +403,7 @@ public class SelectedPointBottomSheetDialogFragment extends MenuBottomSheetDialo if (MeasurementEditingContext.DEFAULT_APP_MODE.equals(routeAppMode)) { icon = getContentIcon(R.drawable.ic_action_split_interval); } else { - icon = getIcon(routeAppMode.getIconRes(), routeAppMode.getIconColorInfo().getColor(nightMode)); + icon = getPaintedIcon(routeAppMode.getIconRes(), routeAppMode.getProfileColor(nightMode)); } return icon; } diff --git a/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java index 1e8efe343b..674ee76042 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/EditTrackGroupDialogFragment.java @@ -121,7 +121,7 @@ public class EditTrackGroupDialogFragment extends MenuBottomSheetDialogFragment final ApplicationMode mode = app.getSettings().getApplicationMode(); final BottomSheetItemWithCompoundButton[] showOnMapItem = new BottomSheetItemWithCompoundButton[1]; showOnMapItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(mode.getIconColorInfo().getColor(nightMode)) + .setCompoundButtonColor(mode.getProfileColor(nightMode)) .setChecked(checked) .setTitle(getString(R.string.shared_string_show_on_map)) .setCustomView(getCustomButtonView(app, mode, checked, nightMode)) diff --git a/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java index 58f1c721ab..6107476426 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java +++ b/OsmAnd/src/net/osmand/plus/profiles/AppProfileArrayAdapter.java @@ -67,7 +67,7 @@ public class AppProfileArrayAdapter extends ArrayAdapter { Drawable iconDrawable; boolean lightContent = app.getSettings().isLightContent(); if (mode.isSelected()) { - iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), mode.getIconColor(!lightContent)); + iconDrawable = app.getUIUtilities().getPaintedIcon(mode.getIconRes(), mode.getIconColor(!lightContent)); } else { iconDrawable = app.getUIUtilities().getIcon(mode.getIconRes(), lightContent); } diff --git a/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java index a2e024f860..6a92563647 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ConfigureProfileMenuAdapter.java @@ -6,10 +6,12 @@ import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.view.ContextThemeWrapper; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; import net.osmand.PlatformUtil; @@ -35,8 +37,8 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter getItems() { @@ -137,9 +140,9 @@ public class ConfigureProfileMenuAdapter extends AbstractProfileMenuAdapter() { @@ -274,8 +275,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment { private boolean deleted; private boolean customProfile; - EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, boolean customProfile, boolean deleted, ProfileIconColors iconColor, int order) { - super(name, descr, stringKey, iconRes, isSelected, iconColor); + EditProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, + boolean customProfile, boolean deleted, @ColorInt int iconColorLight, @ColorInt int iconColorDark, int order) { + super(name, descr, stringKey, iconRes, isSelected, iconColorLight, iconColorDark); this.customProfile = customProfile; this.deleted = deleted; this.order = order; @@ -365,10 +367,9 @@ public class EditProfilesFragment extends BaseOsmAndFragment { if (iconRes == 0 || iconRes == -1) { iconRes = R.drawable.ic_action_world_globe; } - int profileColorResId = mode.getIconColor(nightMode); - int colorNoAlpha = ContextCompat.getColor(app, profileColorResId); + int colorNoAlpha = mode.getIconColor(nightMode); - profileViewHolder.icon.setImageDrawable(uiUtilities.getIcon(iconRes, profileColorResId)); + profileViewHolder.icon.setImageDrawable(uiUtilities.getPaintedIcon(iconRes, colorNoAlpha)); //set up cell color Drawable drawable = UiUtilities.getColoredSelectableDrawable(app, colorNoAlpha, 0.3f); diff --git a/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java index fd0f593462..ea513b405c 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java +++ b/OsmAnd/src/net/osmand/plus/profiles/OnlineRoutingEngineDataObject.java @@ -12,7 +12,7 @@ public class OnlineRoutingEngineDataObject extends ProfileDataObject { String description, String stringKey, int order) { - super(name, description, stringKey, R.drawable.ic_world_globe_dark, false, null); + super(name, description, stringKey, R.drawable.ic_world_globe_dark, false, null, null); this.order = order; } diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java index 35b5be5620..048c7693d1 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataObject.java @@ -1,5 +1,6 @@ package net.osmand.plus.profiles; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.NonNull; @@ -12,15 +13,20 @@ public class ProfileDataObject implements Comparable { private String stringKey; private boolean isSelected; private boolean isEnabled; - private ProfileIconColors iconColor; + @ColorInt + private Integer iconColorLight; + @ColorInt + private Integer iconColorDark; - public ProfileDataObject(String name, String description, String stringKey, int iconRes, boolean isSelected, ProfileIconColors iconColor) { + public ProfileDataObject(String name, String description, String stringKey, int iconRes, boolean isSelected, + @ColorInt Integer iconColorLight, @ColorInt Integer iconColorDark) { this.name = name; this.iconRes = iconRes; this.description = description; this.isSelected = isSelected; this.stringKey = stringKey; - this.iconColor = iconColor; + this.iconColorLight = iconColorLight; + this.iconColorDark = iconColorDark; } public String getName() { @@ -55,8 +61,9 @@ public class ProfileDataObject implements Comparable { return stringKey; } - @ColorRes public int getIconColor(boolean isNightMode) { - return iconColor.getColor(isNightMode); + @ColorInt + public int getIconColor(boolean isNightMode) { + return isNightMode ? iconColorDark : iconColorLight; } @Override diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java index 6306dee9cc..bc939546cf 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileDataUtils.java @@ -33,7 +33,7 @@ public class ProfileDataUtils { description = getAppModeDescription(app, mode); } profiles.add(new ProfileDataObject(mode.toHumanString(), description, - mode.getStringKey(), mode.getIconRes(), false, mode.getIconColorInfo())); + mode.getStringKey(), mode.getIconRes(), false, mode.getProfileColor(false), mode.getProfileColor(true))); } return profiles; } diff --git a/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java b/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java index 3fd97cc523..e7bccfde64 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java +++ b/OsmAnd/src/net/osmand/plus/profiles/ProfileIconColors.java @@ -31,6 +31,7 @@ public enum ProfileIconColors { return name; } + @ColorRes public int getColor(boolean nightMode) { return nightMode ? nightColor : dayColor; } diff --git a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java index ab808de360..43c3b80953 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java +++ b/OsmAnd/src/net/osmand/plus/profiles/RoutingProfileDataObject.java @@ -11,7 +11,7 @@ public class RoutingProfileDataObject extends ProfileDataObject { private String fileName; public RoutingProfileDataObject(String stringKey, String name, String descr, int iconRes, boolean isSelected, String fileName) { - super(name, descr, stringKey, iconRes, isSelected, null); + super(name, descr, stringKey, iconRes, isSelected, null, null); this.fileName = fileName; } diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectMultipleProfilesBottomSheet.java b/OsmAnd/src/net/osmand/plus/profiles/SelectMultipleProfilesBottomSheet.java index 7687f3386b..15593a9f8d 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectMultipleProfilesBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectMultipleProfilesBottomSheet.java @@ -77,11 +77,12 @@ public class SelectMultipleProfilesBottomSheet extends BasePreferenceBottomSheet View itemView = UiUtilities.getInflater(app, nightMode) .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 ? R.color.active_color_primary_dark : R.color.active_color_primary_light; int disableColorId = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light; + int disableColor = ContextCompat.getColor(app, disableColorId); boolean enable = profile.isEnabled(); TextView tvTitle = itemView.findViewById(R.id.title); @@ -97,8 +98,8 @@ public class SelectMultipleProfilesBottomSheet extends BasePreferenceBottomSheet tvDescription.setTextColor(ContextCompat.getColor(app, disableColorId)); } - Drawable drawableIcon = app.getUIUtilities().getIcon( - profile.getIconRes(), enable ? profileColorId : disableColorId); + Drawable drawableIcon = app.getUIUtilities().getPaintedIcon( + profile.getIconRes(), enable ? profileColor : disableColor); ivIcon.setImageDrawable(drawableIcon); UiUtilities.setupCompoundButton(nightMode, ContextCompat.getColor(app, enable ? activeColorId : disableColorId), compoundButton); diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java index eb97a8ae85..5c78ecd04e 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileBottomSheet.java @@ -254,12 +254,13 @@ public class SelectProfileBottomSheet extends BasePreferenceBottomSheet { boolean isSelected = setupSelected && Algorithms.objectEquals(profile.getStringKey(), selectedItemKey); int iconColor; if (dialogMode == DialogMode.NAVIGATION_PROFILE) { - iconColor = isSelected ? activeColorResId : iconDefaultColorResId; + int iconColorResId = isSelected ? activeColorResId : iconDefaultColorResId; + iconColor = ContextCompat.getColor(app, iconColorResId); } else { iconColor = profile.getIconColor(nightMode); } - Drawable drawableIcon = app.getUIUtilities().getIcon(profile.getIconRes(), iconColor); + Drawable drawableIcon = app.getUIUtilities().getPaintedIcon(profile.getIconRes(), iconColor); ivIcon.setImageDrawable(drawableIcon); compoundButton.setChecked(isSelected); UiUtilities.setupCompoundButton(compoundButton, nightMode, UiUtilities.CompoundButtonType.GLOBAL); diff --git a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileMenuAdapter.java b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileMenuAdapter.java index 25b2388875..475f3482c4 100644 --- a/OsmAnd/src/net/osmand/plus/profiles/SelectProfileMenuAdapter.java +++ b/OsmAnd/src/net/osmand/plus/profiles/SelectProfileMenuAdapter.java @@ -6,19 +6,12 @@ import android.graphics.drawable.LayerDrawable; import android.view.View; 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.PlatformUtil; -import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.settings.backend.ApplicationMode; import net.osmand.util.Algorithms; import org.apache.commons.logging.Log; @@ -26,6 +19,13 @@ import org.apache.commons.logging.Log; import java.util.ArrayList; 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 { private static final Log LOG = PlatformUtil.getLog(SelectProfileMenuAdapter.class); @@ -33,8 +33,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter items = new ArrayList<>(); private final OsmandApplication app; private ApplicationMode appMode; - @ColorRes - private int selectedIconColorRes; + @ColorInt + private int selectedIconColor; private boolean bottomButton; private String bottomButtonText; private static final String BUTTON_ITEM = "button_item"; @@ -53,9 +53,8 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter getItems() { @@ -101,7 +100,7 @@ public class SelectProfileMenuAdapter extends AbstractProfileMenuAdapter extends QuickAction { OsmandApplication app = (OsmandApplication) context.getApplicationContext(); - Drawable icon = app.getUIUtilities().getIcon( - getItemIconRes(app, item), getItemIconColorRes(app, item)); + Drawable icon = app.getUIUtilities().getPaintedIcon( + getItemIconRes(app, item), getItemIconColor(app, item)); holder.icon.setImageDrawable(icon); holder.title.setText(getItemName(context, item)); @@ -310,10 +312,11 @@ public abstract class SwitchableAction extends QuickAction { return R.drawable.ic_map; } - @ColorRes - protected int getItemIconColorRes(OsmandApplication app, T item) { + @ColorInt + protected int getItemIconColor(OsmandApplication app, T item) { boolean nightMode = !app.getSettings().isLightContent(); - return nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light; + int colorRes = nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light; + return ContextCompat.getColor(app, colorRes); } protected abstract diff --git a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java index 3710f9832b..da31b61466 100644 --- a/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java +++ b/OsmAnd/src/net/osmand/plus/quickaction/actions/SwitchProfileAction.java @@ -5,6 +5,7 @@ import android.text.TextUtils; import android.view.View; import android.widget.Toast; +import androidx.annotation.ColorInt; import androidx.appcompat.widget.SwitchCompat; import com.google.gson.Gson; @@ -182,13 +183,14 @@ public class SwitchProfileAction extends SwitchableAction { } @Override - protected int getItemIconColorRes(OsmandApplication app, String item) { + @ColorInt + protected int getItemIconColor(OsmandApplication app, String item) { ApplicationMode appMode = getModeForKey(item); if (appMode != null) { boolean nightMode = !app.getSettings().isLightContent(); - return appMode.getIconColorInfo().getColor(nightMode); + return appMode.getProfileColor(nightMode); } - return super.getItemIconColorRes(app, item); + return super.getItemIconColor(app, item); } @Override diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java index 38f6053887..447e011c2d 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/AvoidRoadsBottomSheetDialogFragment.java @@ -11,6 +11,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -66,6 +67,8 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr private boolean hideImpassableRoads; @ColorRes private int compoundButtonColorId = INVALID_ID; + @ColorInt + private Integer compoundButtonColor = null; private ApplicationMode appMode; public void setHideImpassableRoads(boolean hideImpassableRoads) { @@ -237,6 +240,7 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setCompoundButtonColorId(compoundButtonColorId) + .setCompoundButtonColor(compoundButtonColor) .setChecked(selected) .setTitle(parameterName) .setLayoutId(R.layout.bottom_sheet_item_with_switch_no_icon) @@ -258,6 +262,10 @@ public class AvoidRoadsBottomSheetDialogFragment extends MenuBottomSheetDialogFr this.compoundButtonColorId = compoundButtonColorId; } + public void setCompoundButtonColor(@ColorInt int compoundButtonColor) { + this.compoundButtonColor = compoundButtonColor; + } + @Override public void onResume() { super.onResume(); diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java index 8ba86dfe35..25c158a042 100644 --- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteOptionsBottomSheet.java @@ -11,6 +11,7 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.appcompat.widget.SwitchCompat; import androidx.core.content.ContextCompat; @@ -84,8 +85,8 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { private RoutingHelper routingHelper; private RoutingOptionsHelper routingOptionsHelper; private ApplicationMode applicationMode; - @ColorRes - private int selectedModeColorId; + @ColorInt + private int selectedModeColor; private boolean currentMuteState; private boolean currentUseHeightState; private MapActivity mapActivity; @@ -149,7 +150,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { if (dialogMode == null) { dialogMode = DialogMode.DIRECTIONS; } - selectedModeColorId = applicationMode.getIconColorInfo().getColor(nightMode); + selectedModeColor = applicationMode.getProfileColor(nightMode); voiceMuteChangeListener = new StateChangedListener() { @Override public void stateChanged(Boolean change) { @@ -271,7 +272,6 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { private BaseBottomSheetItem createMuteSoundItem(final LocalRoutingParameter optionsItem) { boolean active = !routingHelper.getVoiceRouter().isMuteForMode(applicationMode); - int selectedModeColor = ContextCompat.getColor(app, selectedModeColorId); final View itemView = UiUtilities.getInflater(app, nightMode).inflate( R.layout.bottom_sheet_item_with_descr_switch_and_additional_button_56dp, null, false); final ImageView icon = itemView.findViewById(R.id.icon); @@ -310,7 +310,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { Drawable drawable = app.getUIUtilities().getIcon(R.drawable.ic_action_settings, nightMode ? R.color.route_info_control_icon_color_dark : R.color.route_info_control_icon_color_light); if (Build.VERSION.SDK_INT >= 21) { - Drawable activeDrawable = app.getUIUtilities().getIcon(R.drawable.ic_action_settings, selectedModeColorId); + Drawable activeDrawable = app.getUIUtilities().getPaintedIcon(R.drawable.ic_action_settings, selectedModeColor); drawable = AndroidUtils.createPressedStateListDrawable(drawable, activeDrawable); } voicePromptsBtnImage.setImageDrawable(drawable); @@ -358,7 +358,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { item[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setChecked(!active) - .setCompoundButtonColorId(selectedModeColorId) + .setCompoundButtonColor(selectedModeColor) .setDescription(getElevationDescription(parameter)) .setIcon(getContentIcon(active ? parameter.getActiveIconId() : parameter.getDisabledIconId())) .setTitle(getString(R.string.routing_attr_height_obstacles_name)) @@ -387,7 +387,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { private BaseBottomSheetItem createTimeConditionalRoutingItem(final LocalRoutingParameter optionsItem) { final BottomSheetItemWithCompoundButton[] timeConditionalRoutingItem = new BottomSheetItemWithCompoundButton[1]; timeConditionalRoutingItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(selectedModeColorId) + .setCompoundButtonColor(selectedModeColor) .setChecked(settings.ENABLE_TIME_CONDITIONAL_ROUTING.getModeValue(applicationMode)) .setIcon(getContentIcon((optionsItem.getActiveIconId()))) .setTitle(getString(R.string.temporary_conditional_routing)) @@ -433,7 +433,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { private BaseBottomSheetItem createRouteSimulationItem(final LocalRoutingParameter optionsItem) { final BottomSheetItemWithCompoundButton[] simulateNavigationItem = new BottomSheetItemWithCompoundButton[1]; simulateNavigationItem[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(selectedModeColorId) + .setCompoundButtonColor(selectedModeColor) .setChecked(settings.simulateNavigation) .setIcon(getContentIcon(R.drawable.ic_action_start_navigation)) .setTitle(getString(R.string.simulate_navigation)) @@ -470,7 +470,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { routingOptionsHelper.addNewRouteMenuParameter(applicationMode, optionsItem); AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment(); avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE); - avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId); + avoidRoadsFragment.setCompoundButtonColor(selectedModeColor); avoidRoadsFragment.setApplicationMode(applicationMode); avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG); updateMenu(); @@ -492,7 +492,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { AvoidRoadsBottomSheetDialogFragment avoidRoadsFragment = new AvoidRoadsBottomSheetDialogFragment(); avoidRoadsFragment.setHideImpassableRoads(true); avoidRoadsFragment.setTargetFragment(RouteOptionsBottomSheet.this, AvoidRoadsBottomSheetDialogFragment.REQUEST_CODE); - avoidRoadsFragment.setCompoundButtonColorId(selectedModeColorId); + avoidRoadsFragment.setCompoundButtonColor(selectedModeColor); avoidRoadsFragment.show(mapActivity.getSupportFragmentManager(), AvoidRoadsBottomSheetDialogFragment.TAG); updateMenu(); } @@ -565,7 +565,7 @@ public class RouteOptionsBottomSheet extends MenuBottomSheetDialogFragment { if (parameter != null) { final BottomSheetItemWithCompoundButton[] item = new BottomSheetItemWithCompoundButton[1]; BottomSheetItemWithCompoundButton.Builder builder = new BottomSheetItemWithCompoundButton.Builder(); - builder.setCompoundButtonColorId(selectedModeColorId); + builder.setCompoundButtonColor(selectedModeColor); int iconId = -1; if (parameter.routingParameter != null || parameter instanceof RoutingOptionsHelper.OtherLocalRoutingParameter) { builder.setTitle(parameter.getText(mapActivity)); diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java index 0348bf3eb7..8cbcd4824b 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/ApplicationMode.java @@ -467,12 +467,11 @@ public class ApplicationMode { @ColorInt public int getProfileColor(boolean nightMode) { - int index = getCustomIconColorIndex(); - List customColors = getCustomIconColors(); - if (index < 0 || index >= customColors.size()) { - return ContextCompat.getColor(app, getIconColorInfo().getColor(nightMode)); + Integer customProfileColor = getCustomIconColor(); + if (customProfileColor != null) { + return customProfileColor; } - return Algorithms.parseColor(customColors.get(index)); + return ContextCompat.getColor(app, getIconColorInfo().getColor(nightMode)); } public void setLocationIcon(LocationIcon locationIcon) { @@ -499,12 +498,14 @@ public class ApplicationMode { app.getSettings().CUSTOM_ICON_COLORS.setModeValues(this, customColors); } - public Integer getCustomIconColorIndex() { - return app.getSettings().CUSTOM_ICON_COLOR_INDEX.getModeValue(this); + public Integer getCustomIconColor() { + String customColor = app.getSettings().CUSTOM_ICON_COLOR.getModeValue(this); + return customColor == null ? null : Integer.valueOf(customColor); } - public void setCustomIconColorIndex(int colorIndex) { - app.getSettings().CUSTOM_ICON_COLOR_INDEX.setModeValue(this, colorIndex); + public void setCustomIconColor(Integer customIconColor) { + String valueToSave = customIconColor == null ? null : String.valueOf(customIconColor); + app.getSettings().CUSTOM_ICON_COLOR.setModeValue(this, valueToSave); } public int getOrder() { @@ -605,7 +606,7 @@ public class ApplicationMode { mode.setRouteService(builder.routeService); mode.setIconColor(builder.iconColor); mode.setCustomIconColors(builder.customIconColors); - mode.setCustomIconColorIndex(builder.customIconColorIndex); + mode.setCustomIconColor(builder.customIconColor); mode.setLocationIcon(builder.locationIcon); mode.setNavigationIcon(builder.navigationIcon); mode.setOrder(builder.order); @@ -628,6 +629,7 @@ public class ApplicationMode { builder.setUserProfileName(modeBean.userProfileName); builder.setIconResName(modeBean.iconName); builder.setIconColor(modeBean.iconColor); + builder.setCustomIconColor(modeBean.customIconColor); builder.setRoutingProfile(modeBean.routingProfile); builder.setRouteService(modeBean.routeService); builder.setLocationIcon(modeBean.locIcon); @@ -647,6 +649,7 @@ public class ApplicationMode { mb.stringKey = stringKey; mb.userProfileName = getUserProfileName(); mb.iconColor = getIconColorInfo(); + mb.customIconColor = getCustomIconColor(); mb.iconName = getIconName(); mb.parent = parentAppMode != null ? parentAppMode.getStringKey() : null; mb.routeService = getRouteService(); @@ -724,7 +727,7 @@ public class ApplicationMode { private String iconResName; private ProfileIconColors iconColor; private List customIconColors; - private int customIconColorIndex; + private Integer customIconColor; private LocationIcon locationIcon; private NavigationIcon navigationIcon; private int order = -1; @@ -749,7 +752,7 @@ public class ApplicationMode { applicationMode.setRoutingProfile(routingProfile); applicationMode.setIconResName(iconResName); applicationMode.setCustomIconColors(customIconColors); - applicationMode.setCustomIconColorIndex(customIconColorIndex); + applicationMode.setCustomIconColor(customIconColor); applicationMode.setIconColor(iconColor); applicationMode.setLocationIcon(locationIcon); applicationMode.setNavigationIcon(navigationIcon); @@ -803,8 +806,8 @@ public class ApplicationMode { return this; } - public ApplicationModeBuilder setCustomIconColorIndex(int index) { - this.customIconColorIndex = index; + public ApplicationModeBuilder setCustomIconColor(Integer customIconColor) { + this.customIconColor = customIconColor; return this; } @@ -836,6 +839,8 @@ public class ApplicationMode { @Expose public ProfileIconColors iconColor = ProfileIconColors.DEFAULT; @Expose + public Integer customIconColor = null; + @Expose public String routingProfile = null; @Expose public RouteService routeService = RouteService.OSMAND; diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java index 6683529fff..c516e76ae0 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/OsmandSettings.java @@ -986,7 +986,7 @@ public class OsmandSettings { public final ListStringPreference CUSTOM_ICON_COLORS = (ListStringPreference) new ListStringPreference(this, "custom_icon_colors", null, ",").makeProfile().cache(); - public final CommonPreference CUSTOM_ICON_COLOR_INDEX = new IntPreference(this, "custom_icon_color_index", -1).makeProfile().cache(); + public final CommonPreference CUSTOM_ICON_COLOR = new StringPreference(this, "custom_icon_color", null).makeProfile().cache(); public final CommonPreference USER_PROFILE_NAME = new StringPreference(this, "user_profile_name", "").makeProfile().cache(); diff --git a/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java b/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java index 88405fd010..203c0a2323 100644 --- a/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java +++ b/OsmAnd/src/net/osmand/plus/settings/backend/backup/ProfileSettingsItem.java @@ -301,6 +301,7 @@ public class ProfileSettingsItem extends OsmandSettingsItem { OsmandSettings settings = app.getSettings(); return new String[] { settings.ICON_COLOR.getId(), + settings.CUSTOM_ICON_COLOR.getId(), settings.ICON_RES_NAME.getId(), settings.PARENT_APP_MODE.getId(), settings.ROUTING_PROFILE.getId(), diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java index 8b8b241b1b..f5189617dd 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/BooleanPreferenceBottomSheet.java @@ -103,7 +103,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet { }) .create(); if (isProfileDependent()) { - preferenceBtn[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode)); + preferenceBtn[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode)); } items.add(preferenceBtn[0]); @@ -133,8 +133,7 @@ public class BooleanPreferenceBottomSheet extends BasePreferenceBottomSheet { Context themedCtx = UiUtilities.getThemedContext(app, nightMode); View buttonView = customView.findViewById(R.id.button_container); - int colorRes = mode.getIconColorInfo().getColor(nightMode); - int color = checked ? ContextCompat.getColor(themedCtx, colorRes) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic); + int color = checked ? mode.getProfileColor(nightMode) : AndroidUtils.getColorFromAttr(themedCtx, R.attr.divider_color_basic); int bgColor = UiUtilities.getColorWithAlpha(color, checked ? 0.1f : 0.5f); int selectedColor = UiUtilities.getColorWithAlpha(color, checked ? 0.3f : 0.5f); diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java index 427bda7521..91d92ad241 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ElevationDateBottomSheet.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.view.View; import android.widget.TextView; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -65,6 +66,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment { private int checkedColor; private int uncheckedColor; private int disabledColor; + @ColorInt private int appModeColor; @Override @@ -101,7 +103,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment { on = getString(R.string.shared_string_enabled); off = getString(R.string.shared_string_disabled); - appModeColor = appMode.getIconColorInfo().getColor(nightMode); + appModeColor = appMode.getProfileColor(nightMode); activeColor = AndroidUtils.resolveAttribute(themedCtx, R.attr.active_color_basic); disabledColor = AndroidUtils.resolveAttribute(themedCtx, android.R.attr.textColorSecondary); checkedColor = (nightMode ? app.getResources().getColor(R.color.text_color_primary_dark) : app.getResources().getColor(R.color.text_color_primary_light)); @@ -123,7 +125,7 @@ public class ElevationDateBottomSheet extends MenuBottomSheetDialogFragment { private void createUseHeightButton(Context context) { boolean checked = useHeightPref.getModeValue(appMode); useHeightButton = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() - .setCompoundButtonColorId(appModeColor) + .setCompoundButtonColor(appModeColor) .setChecked(checked) .setTitle(checked ? on : off) .setTitleColorId(checked ? activeColor : disabledColor) diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java index 71881876b3..90b88a264d 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/MultiSelectPreferencesBottomSheet.java @@ -89,7 +89,7 @@ public class MultiSelectPreferencesBottomSheet extends BasePreferenceBottomSheet .setTag(prefId) .create(); if (isProfileDependent()) { - item[0].setCompoundButtonColorId(getAppMode().getIconColorInfo().getColor(nightMode)); + item[0].setCompoundButtonColor(getAppMode().getProfileColor(nightMode)); } items.add(item[0]); } diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java index 743e12ee38..7bde0e8034 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/RecalculateRouteInDeviationBottomSheet.java @@ -107,7 +107,7 @@ public class RecalculateRouteInDeviationBottomSheet extends BooleanPreferenceBot final BottomSheetItemWithCompoundButton[] preferenceBtn = new BottomSheetItemWithCompoundButton[1]; preferenceBtn[0] = (BottomSheetItemWithCompoundButton) new BottomSheetItemWithCompoundButton.Builder() .setChecked(enabled) - .setCompoundButtonColorId(appModeColorId) + .setCompoundButtonColor(appModeColor) .setTitle(enabled ? on : off) .setTitleColorId(enabled ? activeColor : disabledColor) .setCustomView(getCustomButtonView(app, getAppMode(), enabled, nightMode)) diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java index dd87247225..69e225b4c0 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/ResetProfilePrefsBottomSheet.java @@ -45,10 +45,10 @@ public class ResetProfilePrefsBottomSheet extends BasePreferenceBottomSheet { BaseBottomSheetItem profileItem = new BottomSheetItemWithCompoundButton.Builder() .setChecked(true) - .setCompoundButtonColorId(profileColor) - .setButtonTintList(ColorStateList.valueOf(getResolvedColor(profileColor))) + .setCompoundButtonColor(colorNoAlpha) + .setButtonTintList(ColorStateList.valueOf(colorNoAlpha)) .setDescription(ProfileDataUtils.getAppModeDescription(ctx, mode)) - .setIcon(getIcon(mode.getIconRes(), profileColor)) + .setIcon(getPaintedIcon(mode.getIconRes(), colorNoAlpha)) .setTitle(mode.toHumanString()) .setBackground(new LayerDrawable(layers)) .setLayoutId(R.layout.preference_profile_item_with_radio_btn) diff --git a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java index dc673207b2..2a214cdbe3 100644 --- a/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java +++ b/OsmAnd/src/net/osmand/plus/settings/bottomsheets/SingleSelectPreferenceBottomSheet.java @@ -6,6 +6,7 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; @@ -69,8 +70,11 @@ public class SingleSelectPreferenceBottomSheet extends BasePreferenceBottomSheet final BaseBottomSheetItem[] preferenceItem = new BottomSheetItemWithCompoundButton[1]; preferenceItem[0] = new BottomSheetItemWithCompoundButton.Builder() .setChecked(i == selectedEntryIndex) - .setButtonTintList(AndroidUtils.createCheckedColorStateList(ctx, R.color.icon_color_default_light, - isProfileDependent() ? getAppMode().getIconColorInfo().getColor(nightMode) : getActiveColorId())) + .setButtonTintList(AndroidUtils.createCheckedColorIntStateList( + ContextCompat.getColor(ctx,R.color.icon_color_default_light), + isProfileDependent() ? + getAppMode().getProfileColor(nightMode) : + ContextCompat.getColor(ctx, getActiveColorId()))) .setTitle(entries[i]) .setTag(i) .setLayoutId(R.layout.bottom_sheet_item_with_radio_btn_left) diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java index 63dab74fd4..a583940068 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/BaseSettingsFragment.java @@ -680,12 +680,9 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl @ColorInt protected int getActiveProfileColor() { - return ContextCompat.getColor(app, getActiveProfileColorRes()); - } - - @ColorRes - protected int getActiveProfileColorRes() { - return isProfileDependent() ? getSelectedAppMode().getIconColorInfo().getColor(isNightMode()) : R.color.icon_color_active_light; + return isProfileDependent() ? + getSelectedAppMode().getProfileColor(isNightMode()) : + ContextCompat.getColor(app, R.color.icon_color_active_light); } @ColorRes @@ -801,7 +798,7 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl protected Drawable getActiveIcon(@DrawableRes int id) { UiUtilities cache = getIconsCache(); - return cache != null ? cache.getIcon(id, getActiveProfileColorRes()) : null; + return cache != null ? cache.getPaintedIcon(id, getActiveProfileColor()) : null; } protected Drawable getIcon(@DrawableRes int id, @ColorRes int colorId) { @@ -829,7 +826,8 @@ public abstract class BaseSettingsFragment extends PreferenceFragmentCompat impl Drawable icon = AndroidUtils.createEnabledStateListDrawable(disabled, enabled); if (Build.VERSION.SDK_INT < 21) { - ColorStateList colorStateList = AndroidUtils.createEnabledColorStateList(app, R.color.icon_color_default_light, getActiveProfileColorRes()); + int defaultColor = ContextCompat.getColor(app, R.color.icon_color_default_light); + ColorStateList colorStateList = AndroidUtils.createEnabledColorIntStateList(defaultColor, getActiveProfileColor()); icon = DrawableCompat.wrap(icon); DrawableCompat.setTintList(icon, colorStateList); return icon; diff --git a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java index 078197da4f..952ecea396 100644 --- a/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java +++ b/OsmAnd/src/net/osmand/plus/settings/fragments/DuplicatesSettingsAdapter.java @@ -6,7 +6,9 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import alice.tuprolog.Int; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; import net.osmand.AndroidUtils; @@ -121,7 +123,10 @@ public class DuplicatesSettingsAdapter extends RecyclerView.Adapter