From 596dc5cbacfa299f442b2cccfe192d802120dffb Mon Sep 17 00:00:00 2001 From: m1ga Date: Wed, 28 Jun 2023 21:16:41 +0200 Subject: [PATCH] feat(android): add tabMode to TabGroup --- .../design/res/values-land/values-land.xml | 8 + android/modules/design/res/values/values.xml | 302 ++++++++++++++++++ .../ti/modules/titanium/ui/TabGroupProxy.java | 4 + .../titanium/ui/android/AndroidModule.java | 5 + .../tabgroup/TiUITabLayoutTabGroup.java | 5 + .../java/org/appcelerator/titanium/TiC.java | 1 + apidoc/Titanium/UI/Android/Android.yml | 16 +- apidoc/Titanium/UI/TabGroup.yml | 15 + 8 files changed, 355 insertions(+), 1 deletion(-) create mode 100755 android/modules/design/res/values-land/values-land.xml create mode 100755 android/modules/design/res/values/values.xml diff --git a/android/modules/design/res/values-land/values-land.xml b/android/modules/design/res/values-land/values-land.xml new file mode 100755 index 00000000000..99ccd0d6a10 --- /dev/null +++ b/android/modules/design/res/values-land/values-land.xml @@ -0,0 +1,8 @@ + + + + diff --git a/android/modules/design/res/values/values.xml b/android/modules/design/res/values/values.xml new file mode 100755 index 00000000000..fabec010a7d --- /dev/null +++ b/android/modules/design/res/values/values.xml @@ -0,0 +1,302 @@ + + + #14000000 + @android:color/transparent + #14000000 + #44000000 + #0A000000 + #0F000000 + #1AFFFFFF + #2EFFFFFF + #323232 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 4dp + 168dp + 14sp + 8dp + 56dp + 96dp + 56dp + 8dp + 1dp + 12sp + 16dp + 64dp + 0.5dp + 6dp + 24dp + 40dp + 56dp + 6dp + 16dp + 32dp + 24dp + 280dp + 8dp + 8dp + 128dp + 0dp + 6dp + 0dp + -1px + -1px + 12dp + 14dp + 24dp + 14sp + 264dp + 72dp + 14sp + 12sp + + + + 150 + 150 + 2 + 320 + 200 + android.support.design.widget.AppBarLayout$ScrollingViewBehavior + android.support.design.widget.BottomSheetBehavior + %1$d / %2$d + Toggle password visibility + M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z + M2,4.27 L19.73,22 L22.27,19.46 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z + M2,4.27 L2,4.27 L4.54,1.73 L4.54,1.73 L4.54,1 L23,1 L23,23 L1,23 L1,4.27 Z + M3.27,4.27 L19.74,20.74 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java b/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java index 5d7f2131bbb..ed952512568 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/TabGroupProxy.java @@ -364,6 +364,10 @@ public void windowCreated(TiBaseActivity activity, Bundle savedInstanceState) if (getProperty(TiC.PROPERTY_STYLE) == null || ((Integer) getProperty(TiC.PROPERTY_STYLE)) == AndroidModule.TABS_STYLE_DEFAULT) { view = new TiUITabLayoutTabGroup(this, activity); + + if (getProperty(TiC.PROPERTY_TAB_MODE) != null) { + ((TiUITabLayoutTabGroup) view).setTabMode((Integer) getProperty(TiC.PROPERTY_TAB_MODE)); + } } else { view = new TiUIBottomNavigationTabGroup(this, activity); } diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java b/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java index a11b39f061e..e904874429d 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/android/AndroidModule.java @@ -192,6 +192,11 @@ public class AndroidModule extends KrollModule @Kroll.constant public static final int TABS_STYLE_BOTTOM_NAVIGATION = 1; + @Kroll.constant + public static final int TAB_MODE_FIXED = 1; + @Kroll.constant + public static final int TAB_MODE_SCROLLABLE = 0; + @Kroll.constant public static final int TRANSITION_NONE = TiUIView.TRANSITION_NONE; @Kroll.constant diff --git a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/tabgroup/TiUITabLayoutTabGroup.java b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/tabgroup/TiUITabLayoutTabGroup.java index 6d5196a2264..d427239f050 100644 --- a/android/modules/ui/src/java/ti/modules/titanium/ui/widget/tabgroup/TiUITabLayoutTabGroup.java +++ b/android/modules/ui/src/java/ti/modules/titanium/ui/widget/tabgroup/TiUITabLayoutTabGroup.java @@ -402,6 +402,11 @@ public void onTabReselected(TabLayout.Tab tab) { } + public void setTabMode(int value) + { + this.mTabLayout.setTabMode(value); + } + private LinearLayout getTabLinearLayoutForIndex(int index) { LinearLayout stripLayout = ((LinearLayout) this.mTabLayout.getChildAt(0)); diff --git a/android/titanium/src/java/org/appcelerator/titanium/TiC.java b/android/titanium/src/java/org/appcelerator/titanium/TiC.java index b4e525c55e2..f68a3456c6e 100644 --- a/android/titanium/src/java/org/appcelerator/titanium/TiC.java +++ b/android/titanium/src/java/org/appcelerator/titanium/TiC.java @@ -751,6 +751,7 @@ public class TiC public static final String PROPERTY_TAB_OPEN = "tabOpen"; public static final String PROPERTY_TABS_BACKGROUND_COLOR = "tabsBackgroundColor"; public static final String PROPERTY_TABS_BACKGROUND_SELECTED_COLOR = "tabsBackgroundSelectedColor"; + public static final String PROPERTY_TAB_MODE = "tabMode"; public static final String PROPERTY_TAG = "tag"; public static final String PROPERTY_TEMPLATE = "template"; public static final String PROPERTY_TEMPLATES = "templates"; diff --git a/apidoc/Titanium/UI/Android/Android.yml b/apidoc/Titanium/UI/Android/Android.yml index 5fb3834c6d1..cb0788372eb 100644 --- a/apidoc/Titanium/UI/Android/Android.yml +++ b/apidoc/Titanium/UI/Android/Android.yml @@ -894,6 +894,20 @@ properties: platforms: [android] since: "8.0.0" + - name: TAB_MODE_FIXED + summary: Set the TabGroup tab mode to fixed (default). + type: Number + availability: creation + platforms: [android] + since: "12.2.0" + + - name: TAB_MODE_SCROLLABLE + summary: Set the TabGroup tab mode to scrollable. + type: Number + availability: creation + platforms: [android] + since: "12.2.0" + - name: SCROLL_FLAG_ENTER_ALWAYS summary: When entering (scrolling on screen) the view will scroll on any downwards scroll event, regardless of whether the scrolling view is also scrolling. This is commonly referred to as the 'quick return' pattern. type: Number @@ -937,7 +951,7 @@ properties: since: "12.1.0" - name: SCROLL_FLAG_SNAP_MARGINS - summary: An additional flag to be used with 'snap'. If set, the view will be snapped to its top and bottom margins, as opposed to the edges of the view itself. + summary: An additional flag to be used with 'snap'. If set, the view will be snapped to its top and bottom margins, as opposed to the edges of the view itself. type: Number permission: read-only platforms: [android] diff --git a/apidoc/Titanium/UI/TabGroup.yml b/apidoc/Titanium/UI/TabGroup.yml index 90003f689d9..948a3fe6ae6 100644 --- a/apidoc/Titanium/UI/TabGroup.yml +++ b/apidoc/Titanium/UI/TabGroup.yml @@ -471,6 +471,21 @@ properties: since: {android: "3.0.0", iphone: "3.0.0", ipad: "3.0.0"} platforms: [android, iphone, ipad, macos] + - name: tabMode + summary: Property defining which tabMode is used for the TabGroup. + description: | + Sets the style of the TabGroup tabs. + + [TAB_MODE_SCROLLABLE](Titanium.UI.Android.TAB_MODE_SCROLLABLE) is the best style for showing long tab titles and + enables horizontal scrolling (default). + + [TAB_MODE_FIXED](Titanium.UI.Android.TAB_MODE_FIXED) will show all tabs at once. + availability: creation + constants: Titanium.UI.Android.TAB_MODE_* + since: "10.2.0" + type: Number + platforms: [android] + - name: tabsTintColor summary: The tintColor to apply to the tabs. description: |