From 5e68d14273ff365a4840e556051fd6d3ab573615 Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Sun, 24 Jan 2021 19:30:44 +0200 Subject: [PATCH 1/5] Change UI for graph toggle Change UI for graph toggle (Overview | Altitude | Speed). The same toggle is used in Configure Map -> Terrain. --- OsmAnd/res/layout/center_button_container.xml | 19 ++++ OsmAnd/res/layout/custom_radio_buttons.xml | 56 +----------- .../res/layout/gpx_list_item_tab_content.xml | 2 +- OsmAnd/res/layout/left_button_container.xml | 20 +++++ OsmAnd/res/layout/right_button_container.xml | 19 ++++ OsmAnd/src/net/osmand/plus/UiUtilities.java | 87 +++++++++++++++++++ .../plus/myplaces/GPXItemPagerAdapter.java | 74 +++++++++++----- .../views/controls/PagerSlidingTabStrip.java | 14 +-- 8 files changed, 210 insertions(+), 81 deletions(-) create mode 100644 OsmAnd/res/layout/center_button_container.xml create mode 100644 OsmAnd/res/layout/left_button_container.xml create mode 100644 OsmAnd/res/layout/right_button_container.xml diff --git a/OsmAnd/res/layout/center_button_container.xml b/OsmAnd/res/layout/center_button_container.xml new file mode 100644 index 0000000000..8c8fdf1617 --- /dev/null +++ b/OsmAnd/res/layout/center_button_container.xml @@ -0,0 +1,19 @@ + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index d768e58004..d4bd1c8082 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -1,6 +1,5 @@ - + - + - - - - - - - - - - - - - + \ No newline at end of file diff --git a/OsmAnd/res/layout/gpx_list_item_tab_content.xml b/OsmAnd/res/layout/gpx_list_item_tab_content.xml index d2ce779b8b..fbe7bf5e1c 100644 --- a/OsmAnd/res/layout/gpx_list_item_tab_content.xml +++ b/OsmAnd/res/layout/gpx_list_item_tab_content.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + + + + + + diff --git a/OsmAnd/res/layout/right_button_container.xml b/OsmAnd/res/layout/right_button_container.xml new file mode 100644 index 0000000000..bb618949af --- /dev/null +++ b/OsmAnd/res/layout/right_button_container.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 94bd3c4bcb..7c9546d93d 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -90,6 +90,12 @@ public class UiUtilities { END, } + public enum CustomRadioButtonTypeGroup { + START, + CENTER, + END, + } + public UiUtilities(OsmandApplication app) { this.app = app; } @@ -484,6 +490,87 @@ public class UiUtilities { } } + public static void updateCustomRadioButtonsGroup(Context app, View buttonsView, boolean nightMode, + CustomRadioButtonTypeGroup buttonType) { + int activeColor = ContextCompat.getColor(app, nightMode + ? R.color.active_color_primary_dark + : R.color.active_color_primary_light); + int inActiveColor = ContextCompat.getColor(app, nightMode + ? R.color.text_color_secondary_dark + : R.color.text_color_secondary_light); + int textColor = ContextCompat.getColor(app, nightMode + ? R.color.text_color_primary_dark + : R.color.text_color_primary_light); + int roundedCorner = AndroidUtils.dpToPx(app, 4); + boolean isLayoutRtl = AndroidUtils.isLayoutRtl(app); + + TextView startButtonText = buttonsView.findViewById(R.id.left_button); + View startButtonContainer = buttonsView.findViewById(R.id.left_button_container); + TextView centerButtonText = buttonsView.findViewById(R.id.center_button); + View centerButtonContainer = buttonsView.findViewById(R.id.center_button_container); + TextView endButtonText = buttonsView.findViewById(R.id.right_button); + View endButtonContainer = buttonsView.findViewById(R.id.right_button_container); + GradientDrawable background = new GradientDrawable(); + background.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); + background.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(activeColor, 0.5f)); + GradientDrawable startButtonSharpCorner = new GradientDrawable(); + startButtonSharpCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); + GradientDrawable endButtonRoundedCorner = new GradientDrawable(); + endButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); + GradientDrawable centerButtonSharpCorner = new GradientDrawable(); + centerButtonSharpCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); + setStartEndCenterRoundedCorner(roundedCorner, isLayoutRtl, startButtonSharpCorner, endButtonRoundedCorner, centerButtonSharpCorner); + + if (buttonType == CustomRadioButtonTypeGroup.START) { + if (isLayoutRtl) { + background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); + } else { + background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); + } + endButtonContainer.setBackground(endButtonRoundedCorner); + endButtonText.setTextColor(activeColor); + centerButtonContainer.setBackground(centerButtonSharpCorner); + centerButtonText.setTextColor(activeColor); + endButtonText.setTextColor(activeColor); + startButtonContainer.setBackgroundDrawable(background); + startButtonText.setTextColor(textColor); + } else if (buttonType == CustomRadioButtonTypeGroup.CENTER){ + endButtonContainer.setBackground(endButtonRoundedCorner); + endButtonText.setTextColor(activeColor); + startButtonContainer.setBackground(startButtonSharpCorner); + startButtonText.setTextColor(activeColor); + endButtonText.setTextColor(activeColor); + centerButtonContainer.setBackgroundDrawable(background); + centerButtonText.setTextColor(textColor); + } else { + if (isLayoutRtl) { + background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); + } else { + background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); + } + endButtonContainer.setBackgroundDrawable(background); + endButtonText.setTextColor(textColor); + startButtonContainer.setBackground(startButtonSharpCorner); + startButtonText.setTextColor(activeColor); + centerButtonContainer.setBackground(centerButtonSharpCorner); + centerButtonText.setTextColor(activeColor); + } + } + + private static void setStartEndCenterRoundedCorner(int roundedCorner, boolean isLayoutRtl, GradientDrawable startButtonRoundedCorner, GradientDrawable endButtonRoundedCorner, GradientDrawable centerButtonSharpCorner) { + if (isLayoutRtl) { + startButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); + } else { + startButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); + } + if (isLayoutRtl) { + endButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); + } else { + endButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); + } + centerButtonSharpCorner.setCornerRadii(new float[]{0, 0, 0, 0, 0, 0, 0, 0}); + } + public static void setupCompoundButtonDrawable(Context ctx, boolean nightMode, @ColorInt int activeColor, Drawable drawable) { int inactiveColor = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light); int[][] states = new int[][]{ diff --git a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java index 81d9ee9d72..8cd70de903 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java @@ -13,6 +13,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.viewpager.widget.PagerAdapter; +import androidx.viewpager.widget.ViewPager.OnPageChangeListener; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; @@ -23,6 +24,7 @@ import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture; import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; +import net.osmand.AndroidUtils; import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; @@ -78,7 +80,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private boolean chartClicked; - public GPXItemPagerAdapter(@NonNull PagerSlidingTabStrip tabs, + public GPXItemPagerAdapter(@NonNull final PagerSlidingTabStrip tabs, @NonNull GpxDisplayItem gpxItem, @NonNull TrackDisplayHelper displayHelper, @NonNull SegmentActionsListener actionsListener) { @@ -89,6 +91,34 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid this.actionsListener = actionsListener; app = (OsmandApplication) tabs.getContext().getApplicationContext(); iconsCache = app.getUIUtilities(); + + tabs.setOnPageChangeListener(new OnPageChangeListener() { + + @Override + public void onPageSelected(int arg0) { + UiUtilities.CustomRadioButtonTypeGroup type; + if (arg0 == 0) { + type = UiUtilities.CustomRadioButtonTypeGroup.START; + } else if (arg0 == 1) { + type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; + } else { + type = UiUtilities.CustomRadioButtonTypeGroup.END; + } + + View parent = (View) tabs.getChildAt(0); + UiUtilities.updateCustomRadioButtonsGroup(app, parent, false, type); + } + + @Override + public void onPageScrolled(int arg0, float arg1, int arg2) { + } + + @Override + public void onPageScrollStateChanged(int arg0) { + + } + }); + fetchTabTypes(); } @@ -588,7 +618,15 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid @Override public View getCustomTabView(@NonNull ViewGroup parent, int position) { - View tab = LayoutInflater.from(parent.getContext()).inflate(R.layout.gpx_tab, parent, false); + int layoutId; + if (position == 0) { + layoutId = R.layout.left_button_container; + } else if (position == 1) { + layoutId = R.layout.center_button_container; + } else { + layoutId = R.layout.right_button_container; + } + View tab = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); tab.setTag(tabTypes[position].name()); deselect(tab); return tab; @@ -597,29 +635,25 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid @Override public void select(View tab) { GPXTabItemType tabType = GPXTabItemType.valueOf((String) tab.getTag()); - ImageView img = tab.findViewById(R.id.tab_image); - switch (tabs.getTabSelectionType()) { - case ALPHA: - img.setAlpha(tabs.getTabTextSelectedAlpha()); - break; - case SOLID_COLOR: - img.setImageDrawable(iconsCache.getPaintedIcon(tabType.getIconId(), tabs.getTextColor())); - break; + UiUtilities.CustomRadioButtonTypeGroup type; + if (tabType == GPXTabItemType.GPX_TAB_ITEM_GENERAL) { + type = UiUtilities.CustomRadioButtonTypeGroup.START; + } else if (tabType == GPXTabItemType.GPX_TAB_ITEM_ALTITUDE) { + type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; + } else { + type = UiUtilities.CustomRadioButtonTypeGroup.END; } + View parent = (View) tab.getParent(); + UiUtilities.updateCustomRadioButtonsGroup(app,parent , false, type); + + ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) parent.getLayoutParams(); + int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding); + int containerMargin = app.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_content_margin_small); + AndroidUtils.setMargins(params, contentPadding, containerMargin, contentPadding, containerMargin); } @Override public void deselect(View tab) { - GPXTabItemType tabType = GPXTabItemType.valueOf((String) tab.getTag()); - ImageView img = tab.findViewById(R.id.tab_image); - switch (tabs.getTabSelectionType()) { - case ALPHA: - img.setAlpha(tabs.getTabTextAlpha()); - break; - case SOLID_COLOR: - img.setImageDrawable(iconsCache.getPaintedIcon(tabType.getIconId(), tabs.getTabInactiveTextColor())); - break; - } } @Override diff --git a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java index a92d2c5e0a..e38a8619b0 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java @@ -352,13 +352,6 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { tab_title.setTextColor(pager.getCurrentItem() == i ? tabTextColor : tabInactiveTextColor); break; } - if (pager.getAdapter() instanceof CustomTabProvider) { - if (pager.getCurrentItem() == i) { - ((CustomTabProvider) pager.getAdapter()).select(v); - } else { - ((CustomTabProvider) pager.getAdapter()).deselect(v); - } - } // setAllCaps() is only available from API 14, so the upper case is made manually if we are on a // pre-ICS-build @@ -370,6 +363,13 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } } } + if (pager.getAdapter() instanceof CustomTabProvider) { + if (pager.getCurrentItem() == i) { + ((CustomTabProvider) pager.getAdapter()).select(v); + } else { + ((CustomTabProvider) pager.getAdapter()).deselect(v); + } + } } } From 3c6b065f50e62d4d1f62a3f123db93b70472afc6 Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Sun, 24 Jan 2021 23:36:55 +0200 Subject: [PATCH 2/5] null exeption fix --- .../res/layout/gpx_list_item_tab_content.xml | 2 +- OsmAnd/src/net/osmand/plus/UiUtilities.java | 64 +++++++++++++------ .../plus/myplaces/GPXItemPagerAdapter.java | 2 +- .../plus/myplaces/SegmentGPXAdapter.java | 8 +-- 4 files changed, 47 insertions(+), 29 deletions(-) diff --git a/OsmAnd/res/layout/gpx_list_item_tab_content.xml b/OsmAnd/res/layout/gpx_list_item_tab_content.xml index fbe7bf5e1c..d2ce779b8b 100644 --- a/OsmAnd/res/layout/gpx_list_item_tab_content.xml +++ b/OsmAnd/res/layout/gpx_list_item_tab_content.xml @@ -5,7 +5,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - + { PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); tabLayout.setTabBackground(R.color.color_transparent); - tabLayout.setIndicatorColorResource(nightMode ? R.color.active_color_primary_dark : R.color.active_color_primary_light); - tabLayout.setIndicatorBgColorResource(nightMode ? R.color.divider_color_dark : R.color.divider_color_light); - tabLayout.setIndicatorHeight(AndroidUtils.dpToPx(context, 1f)); - if (!nightMode) { - tabLayout.setTextColor(tabLayout.getIndicatorColor()); - tabLayout.setTabInactiveTextColor(ContextCompat.getColor(row.getContext(), R.color.text_color_secondary_light)); - } + tabLayout.setIndicatorHeight(AndroidUtils.dpToPx(context, 0)); tabLayout.setTextSize(AndroidUtils.spToPx(context, 12f)); tabLayout.setShouldExpand(true); WrapContentHeightViewPager pager = row.findViewById(R.id.pager); From 2cdb8953f6af0c3c679cb2f186a03255b3bf830c Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Sun, 24 Jan 2021 23:54:44 +0200 Subject: [PATCH 3/5] Update UiUtilities.java --- OsmAnd/src/net/osmand/plus/UiUtilities.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 3890725d8a..43c6ca94c5 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -560,7 +560,7 @@ public class UiUtilities { endButtonContainer.setBackground(endButtonRoundedCorner); endButtonText.setTextColor(activeColor); } else { - endButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); + endButtonRoundedCorner.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); centerButtonContainer.setBackgroundDrawable(endButtonRoundedCorner); centerButtonText.setTextColor(textColor); } From c50e1d0679f49e2ef4ae1828ec65a80c1df4ad64 Mon Sep 17 00:00:00 2001 From: androiddevkotlin <64539346+androiddevkotlin@users.noreply.github.com> Date: Thu, 28 Jan 2021 18:29:10 +0200 Subject: [PATCH 4/5] Night mode fix, separate layout --- OsmAnd/res/layout/custom_radio_buttons.xml | 55 ++++++++++++++- .../res/layout/custom_radio_buttons_group.xml | 68 +++++++++++++++++++ OsmAnd/src/net/osmand/plus/UiUtilities.java | 7 +- .../plus/myplaces/GPXItemPagerAdapter.java | 9 ++- .../plus/myplaces/SegmentGPXAdapter.java | 6 +- .../net/osmand/plus/track/SegmentsCard.java | 2 +- 6 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 OsmAnd/res/layout/custom_radio_buttons_group.xml diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index d4bd1c8082..d5ef10977d 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -1,6 +1,7 @@ - + + - + - + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons_group.xml b/OsmAnd/res/layout/custom_radio_buttons_group.xml new file mode 100644 index 0000000000..f0caa4a375 --- /dev/null +++ b/OsmAnd/res/layout/custom_radio_buttons_group.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 43c6ca94c5..8847f953eb 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -490,6 +490,7 @@ public class UiUtilities { } } + public static void updateCustomRadioButtonsGroup(Context app, View buttonsView, boolean nightMode, CustomRadioButtonTypeGroup buttonType) { int activeColor = ContextCompat.getColor(app, nightMode @@ -513,12 +514,14 @@ public class UiUtilities { GradientDrawable background = new GradientDrawable(); background.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); background.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(activeColor, 0.5f)); + GradientDrawable startButtonRoundedCorner = new GradientDrawable(); startButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); GradientDrawable endButtonRoundedCorner = new GradientDrawable(); endButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); GradientDrawable centerButtonSharpCorner = new GradientDrawable(); centerButtonSharpCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); + setStartEndCenterRoundedCorner(roundedCorner, isLayoutRtl, startButtonRoundedCorner, endButtonRoundedCorner, centerButtonSharpCorner); if (buttonType == CustomRadioButtonTypeGroup.START) { @@ -564,6 +567,7 @@ public class UiUtilities { centerButtonContainer.setBackgroundDrawable(endButtonRoundedCorner); centerButtonText.setTextColor(textColor); } + } else { if (isLayoutRtl) { background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); @@ -595,6 +599,7 @@ public class UiUtilities { centerButtonSharpCorner.setCornerRadii(new float[]{0, 0, 0, 0, 0, 0, 0, 0}); } + public static void setupCompoundButtonDrawable(Context ctx, boolean nightMode, @ColorInt int activeColor, Drawable drawable) { int inactiveColor = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light); int[][] states = new int[][]{ @@ -747,7 +752,7 @@ public class UiUtilities { int activeDisableColor = getColorWithAlpha(activeColor, 0.25f); ColorStateList activeCsl = new ColorStateList(states, new int[] {activeColor, activeDisableColor}); int inactiveColor = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_secondary_light); - ColorStateList inactiveCsl = new ColorStateList(states, new int[] {inactiveColor, inactiveColor}); + ColorStateList inactiveCsl = new ColorStateList(states, new int[] {activeDisableColor, inactiveColor}); slider.setTrackActiveTintList(activeCsl); slider.setTrackInactiveTintList(inactiveCsl); slider.setHaloTintList(activeCsl); diff --git a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java index a9e36ff421..f3238c90b5 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java @@ -78,16 +78,19 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private SegmentActionsListener actionsListener; private boolean chartClicked; + private boolean nightMode; public GPXItemPagerAdapter(@NonNull final PagerSlidingTabStrip tabs, @NonNull GpxDisplayItem gpxItem, @NonNull TrackDisplayHelper displayHelper, - @NonNull SegmentActionsListener actionsListener) { + @NonNull SegmentActionsListener actionsListener, + final boolean nightMode) { super(); this.tabs = tabs; this.gpxItem = gpxItem; this.displayHelper = displayHelper; + this.nightMode = nightMode; this.actionsListener = actionsListener; app = (OsmandApplication) tabs.getContext().getApplicationContext(); iconsCache = app.getUIUtilities(); @@ -106,7 +109,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid } View parent = (View) tabs.getChildAt(0); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, false, type); + UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); } @Override @@ -644,7 +647,7 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid type = UiUtilities.CustomRadioButtonTypeGroup.END; } View parent = (View) tab.getParent(); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, false, type); + UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) parent.getLayoutParams(); int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding); diff --git a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java index f2d5c88617..9f2e234dcd 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java @@ -1,6 +1,7 @@ package net.osmand.plus.myplaces; import android.content.Context; +import android.graphics.drawable.GradientDrawable; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; @@ -21,7 +22,6 @@ import java.util.List; public class SegmentGPXAdapter extends ArrayAdapter { - private OsmandApplication app; private TrackDisplayHelper displayHelper; private SegmentActionsListener listener; private boolean nightMode; @@ -31,7 +31,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { @NonNull SegmentActionsListener listener, boolean nightMode) { super(context, R.layout.gpx_list_item_tab_content, items); - this.app = (OsmandApplication) context.getApplicationContext(); + OsmandApplication app = (OsmandApplication) context.getApplicationContext(); this.displayHelper = displayHelper; this.listener = listener; this.nightMode = nightMode; @@ -56,7 +56,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { WrapContentHeightViewPager pager = row.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, item, displayHelper, listener)); + pager.setAdapter(new GPXItemPagerAdapter(tabLayout, item, displayHelper, listener, nightMode)); if (create) { tabLayout.setViewPager(pager); } else { diff --git a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java index b3921a6889..421b8a9a8e 100644 --- a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java +++ b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java @@ -48,7 +48,7 @@ public class SegmentsCard extends BaseCard { WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = segmentView.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, displayItem, displayHelper, listener)); + pager.setAdapter(new GPXItemPagerAdapter(tabLayout, displayItem, displayHelper, listener, nightMode)); tabLayout.setViewPager(pager); container.addView(segmentView); From de773909a0ce3fceb6610eae9821189877d1f1bc Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Mon, 1 Feb 2021 11:34:28 +0200 Subject: [PATCH 5/5] Small fixes --- OsmAnd/res/layout/center_button_container.xml | 28 ++-- OsmAnd/res/layout/custom_radio_buttons.xml | 55 ++----- .../res/layout/custom_radio_buttons_group.xml | 68 --------- .../res/layout/gpx_list_item_tab_content.xml | 40 +++--- OsmAnd/res/layout/left_button_container.xml | 7 +- OsmAnd/res/layout/right_button_container.xml | 6 +- OsmAnd/src/net/osmand/plus/UiUtilities.java | 134 +++--------------- .../plus/myplaces/GPXItemPagerAdapter.java | 101 ++++++------- .../plus/myplaces/SegmentGPXAdapter.java | 12 +- .../net/osmand/plus/track/SegmentsCard.java | 2 +- .../views/controls/PagerSlidingTabStrip.java | 115 ++++++++------- 11 files changed, 180 insertions(+), 388 deletions(-) delete mode 100644 OsmAnd/res/layout/custom_radio_buttons_group.xml diff --git a/OsmAnd/res/layout/center_button_container.xml b/OsmAnd/res/layout/center_button_container.xml index 8c8fdf1617..531b6b97e8 100644 --- a/OsmAnd/res/layout/center_button_container.xml +++ b/OsmAnd/res/layout/center_button_container.xml @@ -1,19 +1,19 @@ + xmlns:osmand="http://schemas.android.com/apk/res-auto" + android:id="@+id/center_button_container" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="1"> - + \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons.xml b/OsmAnd/res/layout/custom_radio_buttons.xml index d5ef10977d..2ea2775d62 100644 --- a/OsmAnd/res/layout/custom_radio_buttons.xml +++ b/OsmAnd/res/layout/custom_radio_buttons.xml @@ -1,7 +1,6 @@ - - + android:layout_weight="1" /> - - - + android:layout_weight="1" /> - - - - - - - - - + android:layout_weight="1" /> \ No newline at end of file diff --git a/OsmAnd/res/layout/custom_radio_buttons_group.xml b/OsmAnd/res/layout/custom_radio_buttons_group.xml deleted file mode 100644 index f0caa4a375..0000000000 --- a/OsmAnd/res/layout/custom_radio_buttons_group.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/OsmAnd/res/layout/gpx_list_item_tab_content.xml b/OsmAnd/res/layout/gpx_list_item_tab_content.xml index d2ce779b8b..ac7918d06a 100644 --- a/OsmAnd/res/layout/gpx_list_item_tab_content.xml +++ b/OsmAnd/res/layout/gpx_list_item_tab_content.xml @@ -1,24 +1,32 @@ + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> - + - + + - + + + \ No newline at end of file diff --git a/OsmAnd/res/layout/left_button_container.xml b/OsmAnd/res/layout/left_button_container.xml index c6a32ec74a..e56ec7b06a 100644 --- a/OsmAnd/res/layout/left_button_container.xml +++ b/OsmAnd/res/layout/left_button_container.xml @@ -1,7 +1,6 @@ + osmand:typeface="@string/font_roboto_medium" /> - + \ No newline at end of file diff --git a/OsmAnd/res/layout/right_button_container.xml b/OsmAnd/res/layout/right_button_container.xml index bb618949af..02b237d6c0 100644 --- a/OsmAnd/res/layout/right_button_container.xml +++ b/OsmAnd/res/layout/right_button_container.xml @@ -12,8 +12,8 @@ android:layout_height="match_parent" android:background="?attr/selectableItemBackground" android:gravity="center" + android:text="@string/map_widget_speed" android:textSize="@dimen/default_desc_text_size" - osmand:typeface="@string/font_roboto_medium" - android:text="@string/map_widget_speed"/> + osmand:typeface="@string/font_roboto_medium" /> - + \ No newline at end of file diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java index 8847f953eb..47f3842711 100644 --- a/OsmAnd/src/net/osmand/plus/UiUtilities.java +++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java @@ -86,11 +86,6 @@ public class UiUtilities { } public enum CustomRadioButtonType { - START, - END, - } - - public enum CustomRadioButtonTypeGroup { START, CENTER, END, @@ -462,6 +457,8 @@ public class UiUtilities { TextView startButtonText = buttonsView.findViewById(R.id.left_button); View startButtonContainer = buttonsView.findViewById(R.id.left_button_container); + TextView centerButtonText = buttonsView.findViewById(R.id.center_button); + View centerButtonContainer = buttonsView.findViewById(R.id.center_button_container); TextView endButtonText = buttonsView.findViewById(R.id.right_button); View endButtonContainer = buttonsView.findViewById(R.id.right_button_container); GradientDrawable background = new GradientDrawable(); @@ -477,9 +474,27 @@ public class UiUtilities { endButtonText.setTextColor(activeColor); startButtonContainer.setBackgroundDrawable(background); startButtonText.setTextColor(textColor); + + if (centerButtonContainer != null) { + centerButtonText.setTextColor(activeColor); + centerButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } + } else if (buttonType == CustomRadioButtonType.CENTER) { + background.setCornerRadii(new float[] {0, 0, 0, 0, 0, 0, 0, 0}); + centerButtonContainer.setBackgroundDrawable(background); + centerButtonText.setTextColor(textColor); + + if (endButtonContainer != null) { + endButtonText.setTextColor(activeColor); + endButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } + if (startButtonContainer != null) { + startButtonText.setTextColor(activeColor); + startButtonContainer.setBackgroundColor(Color.TRANSPARENT); + } } else { if (isLayoutRtl) { - background.setCornerRadii(new float[]{radius, radius, 0, 0, 0, 0, radius, radius}); + background.setCornerRadii(new float[] {radius, radius, 0, 0, 0, 0, radius, radius}); } else { background.setCornerRadii(new float[]{0, 0, radius, radius, radius, radius, 0, 0}); } @@ -487,119 +502,14 @@ public class UiUtilities { endButtonText.setTextColor(textColor); startButtonContainer.setBackgroundColor(Color.TRANSPARENT); startButtonText.setTextColor(activeColor); - } - } - - public static void updateCustomRadioButtonsGroup(Context app, View buttonsView, boolean nightMode, - CustomRadioButtonTypeGroup buttonType) { - int activeColor = ContextCompat.getColor(app, nightMode - ? R.color.active_color_primary_dark - : R.color.active_color_primary_light); - int inActiveColor = ContextCompat.getColor(app, nightMode - ? R.color.text_color_secondary_dark - : R.color.text_color_secondary_light); - int textColor = ContextCompat.getColor(app, nightMode - ? R.color.text_color_primary_dark - : R.color.text_color_primary_light); - int roundedCorner = AndroidUtils.dpToPx(app, 4); - boolean isLayoutRtl = AndroidUtils.isLayoutRtl(app); - - TextView startButtonText = buttonsView.findViewById(R.id.left_button); - View startButtonContainer = buttonsView.findViewById(R.id.left_button_container); - TextView centerButtonText = buttonsView.findViewById(R.id.center_button); - View centerButtonContainer = buttonsView.findViewById(R.id.center_button_container); - TextView endButtonText = buttonsView.findViewById(R.id.right_button); - View endButtonContainer = buttonsView.findViewById(R.id.right_button_container); - GradientDrawable background = new GradientDrawable(); - background.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); - background.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(activeColor, 0.5f)); - - GradientDrawable startButtonRoundedCorner = new GradientDrawable(); - startButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - GradientDrawable endButtonRoundedCorner = new GradientDrawable(); - endButtonRoundedCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - GradientDrawable centerButtonSharpCorner = new GradientDrawable(); - centerButtonSharpCorner.setStroke(AndroidUtils.dpToPx(app, 1), UiUtilities.getColorWithAlpha(inActiveColor, 0.5f)); - - setStartEndCenterRoundedCorner(roundedCorner, isLayoutRtl, startButtonRoundedCorner, endButtonRoundedCorner, centerButtonSharpCorner); - - if (buttonType == CustomRadioButtonTypeGroup.START) { - if (isLayoutRtl) { - background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } else { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } - - if (endButtonContainer != null && centerButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - centerButtonContainer.setBackground(centerButtonSharpCorner); - centerButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (centerButtonContainer != null) { - centerButtonContainer.setBackground(endButtonRoundedCorner); - centerButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (endButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } else if (endButtonContainer == null && centerButtonContainer == null) { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner, roundedCorner}); - startButtonContainer.setBackgroundDrawable(background); - startButtonText.setTextColor(textColor); - } - - } else if (buttonType == CustomRadioButtonTypeGroup.CENTER) { - centerButtonContainer.setBackgroundDrawable(background); - centerButtonText.setTextColor(textColor); - startButtonContainer.setBackground(startButtonRoundedCorner); - startButtonText.setTextColor(activeColor); - if (endButtonContainer != null) { - endButtonContainer.setBackground(endButtonRoundedCorner); - endButtonText.setTextColor(activeColor); - } else { - endButtonRoundedCorner.setColor(UiUtilities.getColorWithAlpha(activeColor, 0.1f)); - centerButtonContainer.setBackgroundDrawable(endButtonRoundedCorner); - centerButtonText.setTextColor(textColor); - } - - } else { - if (isLayoutRtl) { - background.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } else { - background.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } - startButtonContainer.setBackground(startButtonRoundedCorner); - startButtonText.setTextColor(activeColor); - endButtonContainer.setBackgroundDrawable(background); - endButtonText.setTextColor(textColor); if (centerButtonContainer != null) { - centerButtonContainer.setBackground(centerButtonSharpCorner); centerButtonText.setTextColor(activeColor); + centerButtonContainer.setBackgroundColor(Color.TRANSPARENT); } } } - private static void setStartEndCenterRoundedCorner(int roundedCorner, boolean isLayoutRtl, GradientDrawable startButtonRoundedCorner, GradientDrawable endButtonRoundedCorner, GradientDrawable centerButtonSharpCorner) { - if (isLayoutRtl) { - startButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } else { - startButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } - if (isLayoutRtl) { - endButtonRoundedCorner.setCornerRadii(new float[]{roundedCorner, roundedCorner, 0, 0, 0, 0, roundedCorner, roundedCorner}); - } else { - endButtonRoundedCorner.setCornerRadii(new float[]{0, 0, roundedCorner, roundedCorner, roundedCorner, roundedCorner, 0, 0}); - } - centerButtonSharpCorner.setCornerRadii(new float[]{0, 0, 0, 0, 0, 0, 0, 0}); - } - - public static void setupCompoundButtonDrawable(Context ctx, boolean nightMode, @ColorInt int activeColor, Drawable drawable) { int inactiveColor = ContextCompat.getColor(ctx, nightMode ? R.color.icon_color_default_dark : R.color.icon_color_default_light); int[][] states = new int[][]{ diff --git a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java index e712d3ca01..0b167e4c97 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/GPXItemPagerAdapter.java @@ -7,13 +7,13 @@ import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; +import android.view.ViewGroup.MarginLayoutParams; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.viewpager.widget.PagerAdapter; -import androidx.viewpager.widget.ViewPager.OnPageChangeListener; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.data.Entry; @@ -24,7 +24,6 @@ import com.github.mikephil.charting.listener.ChartTouchListener.ChartGesture; import com.github.mikephil.charting.listener.OnChartGestureListener; import com.github.mikephil.charting.listener.OnChartValueSelectedListener; -import net.osmand.AndroidUtils; import net.osmand.GPXUtilities; import net.osmand.GPXUtilities.GPXFile; import net.osmand.GPXUtilities.GPXTrackAnalysis; @@ -37,6 +36,7 @@ import net.osmand.plus.OsmAndFormatter; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.UiUtilities; +import net.osmand.plus.UiUtilities.CustomRadioButtonType; import net.osmand.plus.helpers.AndroidUiHelper; import net.osmand.plus.helpers.GpxUiHelper; import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetAxisType; @@ -44,7 +44,6 @@ import net.osmand.plus.helpers.GpxUiHelper.GPXDataSetType; import net.osmand.plus.helpers.GpxUiHelper.LineGraphType; import net.osmand.plus.helpers.GpxUiHelper.OrderedLineDataSet; import net.osmand.plus.track.TrackDisplayHelper; -import net.osmand.plus.views.controls.PagerSlidingTabStrip; import net.osmand.plus.views.controls.PagerSlidingTabStrip.CustomTabProvider; import net.osmand.plus.views.controls.WrapContentHeightViewPager.ViewAtPositionInterface; import net.osmand.util.Algorithms; @@ -53,6 +52,7 @@ import net.osmand.util.MapUtils; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -74,7 +74,6 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private GpxDisplayItem gpxItem; private GPXTabItemType[] tabTypes; - private PagerSlidingTabStrip tabs; private SparseArray views = new SparseArray<>(); private SegmentActionsListener actionsListener; @@ -82,47 +81,17 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid private boolean nightMode; - public GPXItemPagerAdapter(@NonNull final PagerSlidingTabStrip tabs, + public GPXItemPagerAdapter(@NonNull OsmandApplication app, @NonNull GpxDisplayItem gpxItem, @NonNull TrackDisplayHelper displayHelper, - @NonNull SegmentActionsListener actionsListener, - final boolean nightMode) { + boolean nightMode, @NonNull SegmentActionsListener actionsListener) { super(); - this.tabs = tabs; + this.app = app; this.gpxItem = gpxItem; - this.displayHelper = displayHelper; this.nightMode = nightMode; + this.displayHelper = displayHelper; this.actionsListener = actionsListener; - app = (OsmandApplication) tabs.getContext().getApplicationContext(); iconsCache = app.getUIUtilities(); - - tabs.setOnPageChangeListener(new OnPageChangeListener() { - - @Override - public void onPageSelected(int arg0) { - UiUtilities.CustomRadioButtonTypeGroup type; - if (arg0 == 0) { - type = UiUtilities.CustomRadioButtonTypeGroup.START; - } else if (arg0 == 1) { - type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; - } else { - type = UiUtilities.CustomRadioButtonTypeGroup.END; - } - - View parent = (View) tabs.getChildAt(0); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); - } - - @Override - public void onPageScrolled(int arg0, float arg1, int arg2) { - } - - @Override - public void onPageScrollStateChanged(int arg0) { - - } - }); - fetchTabTypes(); } @@ -589,44 +558,60 @@ public class GPXItemPagerAdapter extends PagerAdapter implements CustomTabProvid return view == object; } + int singleTabLayoutId[] = {R.layout.center_button_container}; + int doubleTabsLayoutIds[] = {R.layout.left_button_container, R.layout.right_button_container}; + int tripleTabsLayoutIds[] = {R.layout.left_button_container, R.layout.center_button_container, R.layout.right_button_container}; + @Override public View getCustomTabView(@NonNull ViewGroup parent, int position) { int layoutId; - if (position == 0) { - layoutId = R.layout.left_button_container; - } else if (position == 1) { - layoutId = R.layout.center_button_container; + int count = getCount(); + if (count == 1) { + layoutId = singleTabLayoutId[position]; + } else if (count == 2) { + layoutId = doubleTabsLayoutIds[position]; } else { - layoutId = R.layout.right_button_container; + layoutId = tripleTabsLayoutIds[position]; } View tab = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false); tab.setTag(tabTypes[position].name()); - deselect(tab); return tab; } @Override public void select(View tab) { GPXTabItemType tabType = GPXTabItemType.valueOf((String) tab.getTag()); - UiUtilities.CustomRadioButtonTypeGroup type; - if (tabType == GPXTabItemType.GPX_TAB_ITEM_GENERAL) { - type = UiUtilities.CustomRadioButtonTypeGroup.START; - } else if (tabType == GPXTabItemType.GPX_TAB_ITEM_ALTITUDE) { - type = UiUtilities.CustomRadioButtonTypeGroup.CENTER; - } else { - type = UiUtilities.CustomRadioButtonTypeGroup.END; - } + int index = Arrays.asList(tabTypes).indexOf(tabType); View parent = (View) tab.getParent(); - UiUtilities.updateCustomRadioButtonsGroup(app, parent, nightMode, type); - - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) parent.getLayoutParams(); - int contentPadding = app.getResources().getDimensionPixelSize(R.dimen.content_padding); - int containerMargin = app.getResources().getDimensionPixelSize(R.dimen.bottom_sheet_content_margin_small); - AndroidUtils.setMargins(params, contentPadding, containerMargin, contentPadding, containerMargin); + UiUtilities.updateCustomRadioButtons(app, parent, nightMode, getCustomRadioButtonType(index)); } @Override public void deselect(View tab) { + + } + + @Override + public void tabStylesUpdated(View tabsContainer, int currentPosition) { + ViewGroup.MarginLayoutParams params = (MarginLayoutParams) tabsContainer.getLayoutParams(); + params.height = app.getResources().getDimensionPixelSize(R.dimen.dialog_button_height); + tabsContainer.setLayoutParams(params); + UiUtilities.updateCustomRadioButtons(app, tabsContainer, nightMode, getCustomRadioButtonType(currentPosition)); + } + + private CustomRadioButtonType getCustomRadioButtonType(int index) { + int count = getCount(); + CustomRadioButtonType type = CustomRadioButtonType.CENTER; + if (count == 2) { + type = index > 0 ? CustomRadioButtonType.END : CustomRadioButtonType.START; + } else if (count == 3) { + if (index == 0) { + type = CustomRadioButtonType.START; + } else if (index == 2) { + type = CustomRadioButtonType.END; + } + } + return type; } @Override diff --git a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java index 9f2e234dcd..60141d5ccf 100644 --- a/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java +++ b/OsmAnd/src/net/osmand/plus/myplaces/SegmentGPXAdapter.java @@ -1,13 +1,11 @@ package net.osmand.plus.myplaces; import android.content.Context; -import android.graphics.drawable.GradientDrawable; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; import net.osmand.AndroidUtils; import net.osmand.plus.GpxSelectionHelper.GpxDisplayItem; @@ -22,6 +20,7 @@ import java.util.List; public class SegmentGPXAdapter extends ArrayAdapter { + private OsmandApplication app; private TrackDisplayHelper displayHelper; private SegmentActionsListener listener; private boolean nightMode; @@ -31,7 +30,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { @NonNull SegmentActionsListener listener, boolean nightMode) { super(context, R.layout.gpx_list_item_tab_content, items); - OsmandApplication app = (OsmandApplication) context.getApplicationContext(); + this.app = (OsmandApplication) context.getApplicationContext(); this.displayHelper = displayHelper; this.listener = listener; this.nightMode = nightMode; @@ -56,7 +55,7 @@ public class SegmentGPXAdapter extends ArrayAdapter { WrapContentHeightViewPager pager = row.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, item, displayHelper, listener, nightMode)); + pager.setAdapter(new GPXItemPagerAdapter(app, item, displayHelper, nightMode, listener)); if (create) { tabLayout.setViewPager(pager); } else { @@ -72,9 +71,8 @@ public class SegmentGPXAdapter extends ArrayAdapter { View row = UiUtilities.getInflater(context, nightMode).inflate(R.layout.gpx_list_item_tab_content, root, false); PagerSlidingTabStrip tabLayout = row.findViewById(R.id.sliding_tabs); - tabLayout.setTabBackground(R.color.color_transparent); - tabLayout.setIndicatorHeight(AndroidUtils.dpToPx(context, 0)); - tabLayout.setTextSize(AndroidUtils.spToPx(context, 12f)); + tabLayout.setTabBackground(AndroidUtils.resolveAttribute(context, R.attr.btn_bg_border_inactive)); + tabLayout.setIndicatorHeight(0); tabLayout.setShouldExpand(true); WrapContentHeightViewPager pager = row.findViewById(R.id.pager); pager.setSwipeable(false); diff --git a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java index 9aa7c91391..ad266fc2ab 100644 --- a/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java +++ b/OsmAnd/src/net/osmand/plus/track/SegmentsCard.java @@ -47,7 +47,7 @@ public class SegmentsCard extends BaseCard { WrapContentHeightViewPager pager = segmentView.findViewById(R.id.pager); PagerSlidingTabStrip tabLayout = segmentView.findViewById(R.id.sliding_tabs); - pager.setAdapter(new GPXItemPagerAdapter(tabLayout, displayItem, displayHelper, listener, nightMode)); + pager.setAdapter(new GPXItemPagerAdapter(app, displayItem, displayHelper, nightMode, listener)); tabLayout.setViewPager(pager); container.addView(segmentView); diff --git a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java index e38a8619b0..f6d5bdd4fd 100644 --- a/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java +++ b/OsmAnd/src/net/osmand/plus/views/controls/PagerSlidingTabStrip.java @@ -68,6 +68,7 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { public View getCustomTabView(@NonNull ViewGroup parent, int position); public void select(View tab); public void deselect(View tab); + public void tabStylesUpdated(View tabsContainer, int currentPosition); } public interface OnTabReselectedListener { @@ -307,6 +308,10 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { } } + public int getCurrentPosition() { + return currentPosition; + } + private void addTab(final int position, CharSequence title, View tabView) { TextView textView = (TextView) tabView.findViewById(R.id.tab_title); if (textView != null) { @@ -332,42 +337,32 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private void updateTabStyles() { tabsContainer.setBackgroundResource(tabBackgroundResId); - for (int i = 0; i < tabCount; i++) { - View v = tabsContainer.getChildAt(i); - v.setBackgroundResource(tabBackgroundResId); - v.setPadding(tabPadding, v.getPaddingTop(), tabPadding, v.getPaddingBottom()); - TextView tab_title = (TextView) v.findViewById(R.id.tab_title); + if (pager.getAdapter() instanceof CustomTabProvider) { + ((CustomTabProvider) pager.getAdapter()).tabStylesUpdated(tabsContainer, currentPosition); + } else { + for (int i = 0; i < tabCount; i++) { + View v = tabsContainer.getChildAt(i); + v.setBackgroundResource(tabBackgroundResId); + v.setPadding(tabPadding, v.getPaddingTop(), tabPadding, v.getPaddingBottom()); - if (tab_title != null) { - tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize); - tab_title.setTypeface(tabTypeface, pager.getCurrentItem() == i ? tabTypefaceSelectedStyle : tabTypefaceStyle); - switch (tabSelectionType) { - case ALPHA: - float alpha = pager.getCurrentItem() == i ? tabTextSelectedAlpha : tabTextAlpha; - tab_title.setAlpha(alpha); - tab_title.setTextColor(tabTextColor); - break; - case SOLID_COLOR: - tab_title.setAlpha(OPAQUE); - tab_title.setTextColor(pager.getCurrentItem() == i ? tabTextColor : tabInactiveTextColor); - break; - } - - // setAllCaps() is only available from API 14, so the upper case is made manually if we are on a - // pre-ICS-build - if (textAllCaps) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - tab_title.setAllCaps(true); - } else { - tab_title.setText(tab_title.getText().toString().toUpperCase(locale)); + TextView tabTitle = v.findViewById(R.id.tab_title); + if (tabTitle != null) { + tabTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, tabTextSize); + tabTitle.setTypeface(tabTypeface, pager.getCurrentItem() == i ? tabTypefaceSelectedStyle : tabTypefaceStyle); + switch (tabSelectionType) { + case ALPHA: + float alpha = pager.getCurrentItem() == i ? tabTextSelectedAlpha : tabTextAlpha; + tabTitle.setAlpha(alpha); + tabTitle.setTextColor(tabTextColor); + break; + case SOLID_COLOR: + tabTitle.setAlpha(OPAQUE); + tabTitle.setTextColor(pager.getCurrentItem() == i ? tabTextColor : tabInactiveTextColor); + break; + } + if (textAllCaps) { + tabTitle.setAllCaps(true); } - } - } - if (pager.getAdapter() instanceof CustomTabProvider) { - if (pager.getCurrentItem() == i) { - ((CustomTabProvider) pager.getAdapter()).select(v); - } else { - ((CustomTabProvider) pager.getAdapter()).deselect(v); } } } @@ -558,39 +553,41 @@ public class PagerSlidingTabStrip extends HorizontalScrollView { private void notSelected(View tab) { if (tab != null) { - TextView title = (TextView) tab.findViewById(R.id.tab_title); - if (title != null) { - title.setTypeface(tabTypeface, tabTypefaceStyle); - switch (tabSelectionType) { - case ALPHA: - title.setAlpha(tabTextAlpha); - break; - case SOLID_COLOR: - title.setTextColor(tabInactiveTextColor); - break; - } - } if (pager.getAdapter() instanceof CustomTabProvider) { ((CustomTabProvider) pager.getAdapter()).deselect(tab); + } else { + TextView title = tab.findViewById(R.id.tab_title); + if (title != null) { + title.setTypeface(tabTypeface, tabTypefaceStyle); + switch (tabSelectionType) { + case ALPHA: + title.setAlpha(tabTextAlpha); + break; + case SOLID_COLOR: + title.setTextColor(tabInactiveTextColor); + break; + } + } } } } private void selected(View tab) { if (tab != null) { - TextView title = (TextView) tab.findViewById(R.id.tab_title); - if (title != null) { - title.setTypeface(tabTypeface, tabTypefaceSelectedStyle); - switch (tabSelectionType) { - case ALPHA: - title.setAlpha(tabTextSelectedAlpha); - break; - case SOLID_COLOR: - title.setTextColor(tabTextColor); - break; - } - if (pager.getAdapter() instanceof CustomTabProvider) { - ((CustomTabProvider) pager.getAdapter()).select(tab); + if (pager.getAdapter() instanceof CustomTabProvider) { + ((CustomTabProvider) pager.getAdapter()).select(tab); + } else { + TextView title = tab.findViewById(R.id.tab_title); + if (title != null) { + title.setTypeface(tabTypeface, tabTypefaceSelectedStyle); + switch (tabSelectionType) { + case ALPHA: + title.setAlpha(tabTextSelectedAlpha); + break; + case SOLID_COLOR: + title.setTextColor(tabTextColor); + break; + } } } }