44import android .content .Context ;
55import android .content .res .Configuration ;
66import android .graphics .Point ;
7+ import android .graphics .drawable .Drawable ;
78import android .provider .Settings ;
89import android .util .AttributeSet ;
910import android .util .DisplayMetrics ;
10- import android .util .Log ;
1111import android .view .Display ;
12+ import android .view .MotionEvent ;
1213import android .view .View ;
1314import android .view .ViewGroup ;
1415import android .view .Window ;
2324import de .dlyt .yanndroid .oneui .sesl .support .ViewSupport ;
2425import de .dlyt .yanndroid .oneui .sesl .support .WindowManagerSupport ;
2526import de .dlyt .yanndroid .oneui .sesl .tabs .SamsungBaseTabLayout ;
27+ import de .dlyt .yanndroid .oneui .utils .CustomButtonClickListener ;
2628
2729public class BottomNavigationView extends SamsungBaseTabLayout implements View .OnSystemUiVisibilityChangeListener {
2830 private Activity mActivity ;
2931 private boolean mIsResumed = false ;
30- private ArrayList <TextView > mTextViews ;
3132
3233 public BottomNavigationView (Context context , AttributeSet attrs ) {
3334 this (context , attrs , R .attr .bottomNaviViewStyle );
@@ -38,110 +39,68 @@ public BottomNavigationView(Context context, AttributeSet attrs, int defStyleAtt
3839 mDepthStyle = 1 ;
3940 }
4041
41- public void updateWidget (Activity activity ) {
42- mActivity = activity ;
43- mTextViews = new ArrayList <>();
44-
45- Float [] tabCount = new Float [getTabCount ()];
46- float f = 0.0f ;
47-
48- for (int tabPosition = 0 ; tabPosition < getTabCount (); tabPosition ++) {
49- Tab tab = getTabAt (tabPosition );
50- ViewGroup tabView = (ViewGroup ) getTabView (tabPosition );
51- if (!(tab == null || tabView == null )) {
52- TextView textView = tab .seslGetTextView ();
53- mTextViews .add (textView );
54- ViewSupport .setPointerIcon (tabView , 1000 );
42+ @ Override
43+ public void onConfigurationChanged (Configuration newConfig ) {
44+ super .onConfigurationChanged (newConfig );
45+ invalidateTabLayout ();
46+ }
5547
56- tabCount [tabPosition ] = getTabTextWidth (tab .seslGetTextView ());
57- f += tabCount [tabPosition ];
58- }
48+ @ Override
49+ public void onSystemUiVisibilityChange (int visibility ) {
50+ if (mIsResumed ) {
51+ invalidateTabLayout ();
5952 }
53+ }
6054
61- setViewDimens (tabCount , f );
62- invalidateTabLayout ();
55+ public void addTabCustomButton (Drawable icon , CustomButtonClickListener listener ) {
56+ Tab tab = newTab ().setIcon (icon ).setIsCustomButtonView (true );
57+ addTab (tab );
58+ ((ViewGroup ) getTabView (tab .getPosition ())).setOnTouchListener (listener );
6359 }
6460
65- private void setViewDimens (Float [] fArr , float f ) {
66- int i ;
67- int tabCount = getTabCount ();
68- if (tabCount > 0 ) {
69- int dimensionPixelSize = getResources ().getDimensionPixelSize (R .dimen .tablayout_start_end_margin );
70- i = getContext ().getResources ().getDisplayMetrics ().widthPixels ;
71- int i2 = i - (dimensionPixelSize * 2 );
72- float dimensionPixelSize2 = (float ) getResources ().getDimensionPixelSize (R .dimen .tablayout_text_padding );
73- float f2 = (float ) i2 ;
74- float f3 = f2 / ((float ) tabCount );
75- float f4 = dimensionPixelSize2 * 2.0f ;
76- float f5 = (0.75f * f2 ) - f4 ;
77- float f6 = 0.0f ;
78- int i3 = 0 ;
79- int i4 = 0 ;
80- for (int i5 = 0 ; i5 < tabCount ; i5 ++) {
81- Log .d ("BottomNavigationView" , "i : " + i5 + ", width : " + fArr [i5 ]);
82- if (f5 < fArr [i5 ].floatValue ()) {
83- i3 = (int ) (((float ) i3 ) + (fArr [i5 ].floatValue () - f5 ));
84- fArr [i5 ] = Float .valueOf (f5 );
85- i4 ++;
86- f6 = f5 ;
87- } else if (f6 < fArr [i5 ].floatValue ()) {
88- f6 = fArr [i5 ].floatValue ();
89- }
90- }
91- float f7 = f - ((float ) i3 );
92- setTabMode (0 );
93- Log .d ("BottomNavigationView" , "[MODE_SCROLLABLE]" );
94- Log .d ("BottomNavigationView" , "availableContentWidth : " + i2 + ", tabTextPaddingLeftRight : " + dimensionPixelSize2 );
95- ViewGroup viewGroup = (ViewGroup ) getChildAt (0 );
96- int i6 = (tabCount - i4 ) * 2 ;
97- int i7 = i6 > 0 ? ((int ) ((f2 - f7 ) - ((((float ) i4 ) * dimensionPixelSize2 ) * 2.0f ))) / i6 : 0 ;
98- int i8 = (int ) dimensionPixelSize2 ;
99- int i9 = -1 ;
100- boolean z = true ;
101- if (i7 < i8 ) {
102- i7 = i8 ;
103- } else {
104- float f8 = f6 + dimensionPixelSize2 + dimensionPixelSize2 ;
105- if (f3 >= f8 ) {
106- setTabMode (1 );
107- for (int i10 = 0 ; i10 < tabCount ; i10 ++) {
108- ((ViewGroup ) viewGroup .getChildAt (i10 )).getChildAt (0 ).getLayoutParams ().width = -1 ;
109- getTabAt (i10 ).seslGetTextView ().setMaxWidth (i2 );
110- getTabAt (i10 ).seslGetTextView ().setMinimumWidth (0 );
111- getTabAt (i10 ).seslGetTextView ().setPadding (0 , 0 , 0 , 0 );
112- }
113- Log .d ("BottomNavigationView" , "[MODE_FIXED] TabCount : " + tabCount + ", minNeededTabWidth : " + f3 + ", maxTabWidth : " + f8 );
114- return ;
61+ public void setResumeStatus (boolean isResumed ) {
62+ mIsResumed = isResumed ;
63+ }
64+
65+ public void setTabLayoutEnabled (boolean enabled ) {
66+ float f ;
67+ setEnabled (enabled );
68+ for (int tabPosition = 0 ; tabPosition < getTabCount (); tabPosition ++) {
69+ ViewGroup tabView = (ViewGroup ) getTabView (tabPosition );
70+ if (tabView != null ) {
71+ tabView .setEnabled (enabled );
72+ if (enabled ) {
73+ f = 1.0f ;
74+ } else {
75+ f = 0.4f ;
11576 }
77+ tabView .setAlpha (f );
11678 }
117- int i11 = 0 ;
118- while (i11 < tabCount ) {
119- boolean z2 = fArr [i11 ].floatValue () >= f5 ? z : false ;
120- int floatValue = (int ) (fArr [i11 ].floatValue () + ((z2 ? dimensionPixelSize2 : (float ) i7 ) * 2.0f ));
121- ViewGroup .LayoutParams layoutParams = viewGroup .getChildAt (i11 ).getLayoutParams ();
122- layoutParams .width = floatValue ;
123- layoutParams .height = i9 ;
124- viewGroup .getChildAt (i11 ).setMinimumWidth (floatValue );
125- int i12 = z2 ? 0 : (int ) (((float ) i7 ) - dimensionPixelSize2 );
126- getTabAt (i11 ).seslGetTextView ().setMaxWidth ((int ) f5 );
127- getTabAt (i11 ).seslGetTextView ().setMinimumWidth (floatValue - ((int ) f4 ));
128- getTabAt (i11 ).seslGetTextView ().setPadding (i12 , 0 , i12 , 0 );
129- Log .d ("BottomNavigationView" , "params.width : " + layoutParams .width + ", tabWidthList[" + i11 + "] : " + fArr [i11 ] + ", LeftRightPadding : " + (i7 * 2 ));
130- i11 ++;
131- i9 = -1 ;
132- z = true ;
133- }
134- requestLayout ();
13579 }
13680 }
13781
82+ public void updateWidget (Activity activity ) {
83+ mActivity = activity ;
84+ invalidateTabLayout ();
85+ }
86+
13887 private void invalidateTabLayout () {
13988 ArrayList <Float > tabTextWidthList = new ArrayList <>();
14089 float tabTextWidthSum = 0.0f ;
14190 for (int tabPosition = 0 ; tabPosition < getTabCount (); tabPosition ++) {
142- float width = getTabTextWidth ((TextView ) mTextViews .get (tabPosition ));
91+ Tab tab = getTabAt (tabPosition );
92+ ViewGroup tabView = (ViewGroup ) getTabView (tabPosition );
93+ float width = 0.0f ;
94+
95+ if (tab .getIsCustomButtonView ()) {
96+ width = tab .getIcon ().getIntrinsicWidth ();
97+ tabView .setBackground (getContext ().getDrawable (R .drawable .bottomnavview_button_background ));
98+ } else
99+ width = getTabTextWidth (tab .seslGetTextView ());
100+
143101 tabTextWidthList .add (width );
144102 tabTextWidthSum += width ;
103+ ViewSupport .setPointerIcon (tabView , 1000 /* PointerIcon.TYPE_ARROW */ );
145104 }
146105 addTabPaddingValue (tabTextWidthList , tabTextWidthSum );
147106 }
@@ -214,40 +173,6 @@ private ViewGroup getTabViewGroup() {
214173 return (ViewGroup ) view ;
215174 }
216175
217- public void setTabLayoutEnabled (boolean enabled ) {
218- float f ;
219- setEnabled (enabled );
220- for (int tabPosition = 0 ; tabPosition < getTabCount (); tabPosition ++) {
221- ViewGroup tabView = (ViewGroup ) getTabView (tabPosition );
222- if (tabView != null ) {
223- tabView .setEnabled (enabled );
224- if (enabled ) {
225- f = 1.0f ;
226- } else {
227- f = 0.4f ;
228- }
229- tabView .setAlpha (f );
230- }
231- }
232- }
233-
234- public void setResumeStatus (boolean isResumed ) {
235- mIsResumed = isResumed ;
236- }
237-
238- @ Override
239- public void onSystemUiVisibilityChange (int visibility ) {
240- if (mIsResumed ) {
241- invalidateTabLayout ();
242- }
243- }
244-
245- @ Override
246- public void onConfigurationChanged (Configuration newConfig ) {
247- super .onConfigurationChanged (newConfig );
248- invalidateTabLayout ();
249- }
250-
251176 private double getDensity (Context context ) {
252177 Configuration configuration = context .getResources ().getConfiguration ();
253178 DisplayMetrics metrics = new DisplayMetrics ();
0 commit comments