9999import java .lang .annotation .RetentionPolicy ;
100100import java .lang .ref .WeakReference ;
101101import java .util .ArrayList ;
102- import java .util .HashMap ;
103102import java .util .Iterator ;
104103
105104/**
@@ -343,28 +342,7 @@ public class TabLayout extends HorizontalScrollView {
343342 public @interface TabIndicatorGravity {}
344343
345344 /** Callback interface invoked when a tab's selection state changes. */
346- public interface OnTabSelectedListener {
347- /**
348- * Called when a tab enters the selected state.
349- *
350- * @param tab The tab that was selected
351- */
352- public void onTabSelected (Tab tab );
353-
354- /**
355- * Called when a tab exits the selected state.
356- *
357- * @param tab The tab that was unselected
358- */
359- public void onTabUnselected (Tab tab );
360-
361- /**
362- * Called when a tab that is already selected is chosen again by the user. Some applications may
363- * use this action to return to the top level of a category.
364- *
365- * @param tab The tab that was reselected.
366- */
367- public void onTabReselected (Tab tab );
345+ public interface OnTabSelectedListener extends BaseOnTabSelectedListener <Tab > {
368346 }
369347
370348 /** Callback interface invoked when a tab's selection state changes. */
@@ -432,12 +410,10 @@ public interface BaseOnTabSelectedListener<T extends Tab> {
432410 boolean tabIndicatorFullWidth ;
433411 boolean unboundedRipple ;
434412
435- @ Nullable private OnTabSelectedListener selectedListener ;
413+ @ Nullable private BaseOnTabSelectedListener selectedListener ;
436414
437- private final ArrayList <OnTabSelectedListener > selectedListeners = new ArrayList <>();
438- @ Nullable private OnTabSelectedListener currentVpSelectedListener ;
439- private final HashMap <BaseOnTabSelectedListener <? extends Tab >, OnTabSelectedListener >
440- selectedListenerMap = new HashMap <>();
415+ private final ArrayList <BaseOnTabSelectedListener > selectedListeners = new ArrayList <>();
416+ @ Nullable private BaseOnTabSelectedListener currentVpSelectedListener ;
441417
442418 private ValueAnimator scrollAnimator ;
443419
@@ -729,6 +705,15 @@ private void addTabFromItemView(@NonNull TabItem item) {
729705 */
730706 @ Deprecated
731707 public void setOnTabSelectedListener (@ Nullable OnTabSelectedListener listener ) {
708+ setOnTabSelectedListener ((BaseOnTabSelectedListener ) listener );
709+ }
710+
711+ /**
712+ * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and {@link
713+ * #removeOnTabSelectedListener(OnTabSelectedListener)}.
714+ */
715+ @ Deprecated
716+ public void setOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
732717 // The logic in this method emulates what we had before support for multiple
733718 // registered listeners.
734719 if (selectedListener != null ) {
@@ -742,16 +727,6 @@ public void setOnTabSelectedListener(@Nullable OnTabSelectedListener listener) {
742727 }
743728 }
744729
745- /**
746- * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and {@link
747- * #removeOnTabSelectedListener(OnTabSelectedListener)}.
748- */
749- @ Deprecated
750- public void setOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
751- clearOnTabSelectedListeners ();
752- addOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
753- }
754-
755730 /**
756731 * Add a {@link TabLayout.OnTabSelectedListener} that will be invoked when tab selection changes.
757732 *
@@ -761,9 +736,7 @@ public void setOnTabSelectedListener(@Nullable BaseOnTabSelectedListener listene
761736 * @param listener listener to add
762737 */
763738 public void addOnTabSelectedListener (@ NonNull OnTabSelectedListener listener ) {
764- if (!selectedListeners .contains (listener )) {
765- selectedListeners .add (listener );
766- }
739+ addOnTabSelectedListener ((BaseOnTabSelectedListener ) listener );
767740 }
768741
769742 /**
@@ -778,7 +751,9 @@ public void addOnTabSelectedListener(@NonNull OnTabSelectedListener listener) {
778751 */
779752 @ Deprecated
780753 public void addOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
781- addOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
754+ if (!selectedListeners .contains (listener )) {
755+ selectedListeners .add (listener );
756+ }
782757 }
783758
784759 /**
@@ -788,7 +763,7 @@ public void addOnTabSelectedListener(@Nullable BaseOnTabSelectedListener listene
788763 * @param listener listener to remove
789764 */
790765 public void removeOnTabSelectedListener (@ NonNull OnTabSelectedListener listener ) {
791- selectedListeners . remove ( listener );
766+ removeOnTabSelectedListener (( BaseOnTabSelectedListener ) listener );
792767 }
793768
794769 /**
@@ -800,48 +775,12 @@ public void removeOnTabSelectedListener(@NonNull OnTabSelectedListener listener)
800775 */
801776 @ Deprecated
802777 public void removeOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
803- removeOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
804- }
805-
806- /** @hide */
807- @ Nullable
808- @ RestrictTo (LIBRARY_GROUP )
809- protected OnTabSelectedListener wrapOnTabSelectedListener (
810- @ Nullable final BaseOnTabSelectedListener baseListener ) {
811- if (baseListener == null ) {
812- return null ;
813- }
814-
815- if (selectedListenerMap .containsKey (baseListener )) {
816- return selectedListenerMap .get (baseListener );
817- }
818-
819- OnTabSelectedListener listener =
820- new OnTabSelectedListener () {
821- @ Override
822- public void onTabSelected (Tab tab ) {
823- baseListener .onTabSelected (tab );
824- }
825-
826- @ Override
827- public void onTabUnselected (Tab tab ) {
828- baseListener .onTabUnselected (tab );
829- }
830-
831- @ Override
832- public void onTabReselected (Tab tab ) {
833- baseListener .onTabReselected (tab );
834- }
835- };
836-
837- selectedListenerMap .put (baseListener , listener );
838- return listener ;
778+ selectedListeners .remove (listener );
839779 }
840780
841781 /** Remove all previously added {@link TabLayout.OnTabSelectedListener}s. */
842782 public void clearOnTabSelectedListeners () {
843783 selectedListeners .clear ();
844- selectedListenerMap .clear ();
845784 }
846785
847786 /**
0 commit comments