102102import java .lang .annotation .RetentionPolicy ;
103103import java .lang .ref .WeakReference ;
104104import java .util .ArrayList ;
105- import java .util .HashMap ;
106105import java .util .Iterator ;
107106
108107/**
@@ -358,28 +357,7 @@ public class TabLayout extends HorizontalScrollView {
358357 public @interface TabIndicatorGravity {}
359358
360359 /** Callback interface invoked when a tab's selection state changes. */
361- public interface OnTabSelectedListener {
362- /**
363- * Called when a tab enters the selected state.
364- *
365- * @param tab The tab that was selected
366- */
367- public void onTabSelected (Tab tab );
368-
369- /**
370- * Called when a tab exits the selected state.
371- *
372- * @param tab The tab that was unselected
373- */
374- public void onTabUnselected (Tab tab );
375-
376- /**
377- * Called when a tab that is already selected is chosen again by the user. Some applications may
378- * use this action to return to the top level of a category.
379- *
380- * @param tab The tab that was reselected.
381- */
382- public void onTabReselected (Tab tab );
360+ public interface OnTabSelectedListener extends BaseOnTabSelectedListener <Tab > {
383361 }
384362
385363 /** Callback interface invoked when a tab's selection state changes. */
@@ -447,12 +425,10 @@ public interface BaseOnTabSelectedListener<T extends Tab> {
447425 boolean tabIndicatorFullWidth ;
448426 boolean unboundedRipple ;
449427
450- @ Nullable private OnTabSelectedListener selectedListener ;
428+ @ Nullable private BaseOnTabSelectedListener selectedListener ;
451429
452- private final ArrayList <OnTabSelectedListener > selectedListeners = new ArrayList <>();
453- @ Nullable private OnTabSelectedListener currentVpSelectedListener ;
454- private final HashMap <BaseOnTabSelectedListener <? extends Tab >, OnTabSelectedListener >
455- selectedListenerMap = new HashMap <>();
430+ private final ArrayList <BaseOnTabSelectedListener > selectedListeners = new ArrayList <>();
431+ @ Nullable private BaseOnTabSelectedListener currentVpSelectedListener ;
456432
457433 private ValueAnimator scrollAnimator ;
458434
@@ -744,6 +720,15 @@ private void addTabFromItemView(@NonNull TabItem item) {
744720 */
745721 @ Deprecated
746722 public void setOnTabSelectedListener (@ Nullable OnTabSelectedListener listener ) {
723+ setOnTabSelectedListener ((BaseOnTabSelectedListener ) listener );
724+ }
725+
726+ /**
727+ * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and {@link
728+ * #removeOnTabSelectedListener(OnTabSelectedListener)}.
729+ */
730+ @ Deprecated
731+ public void setOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
747732 // The logic in this method emulates what we had before support for multiple
748733 // registered listeners.
749734 if (selectedListener != null ) {
@@ -757,16 +742,6 @@ public void setOnTabSelectedListener(@Nullable OnTabSelectedListener listener) {
757742 }
758743 }
759744
760- /**
761- * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and {@link
762- * #removeOnTabSelectedListener(OnTabSelectedListener)}.
763- */
764- @ Deprecated
765- public void setOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
766- clearOnTabSelectedListeners ();
767- addOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
768- }
769-
770745 /**
771746 * Add a {@link TabLayout.OnTabSelectedListener} that will be invoked when tab selection changes.
772747 *
@@ -776,9 +751,7 @@ public void setOnTabSelectedListener(@Nullable BaseOnTabSelectedListener listene
776751 * @param listener listener to add
777752 */
778753 public void addOnTabSelectedListener (@ NonNull OnTabSelectedListener listener ) {
779- if (!selectedListeners .contains (listener )) {
780- selectedListeners .add (listener );
781- }
754+ addOnTabSelectedListener ((BaseOnTabSelectedListener ) listener );
782755 }
783756
784757 /**
@@ -793,7 +766,9 @@ public void addOnTabSelectedListener(@NonNull OnTabSelectedListener listener) {
793766 */
794767 @ Deprecated
795768 public void addOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
796- addOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
769+ if (!selectedListeners .contains (listener )) {
770+ selectedListeners .add (listener );
771+ }
797772 }
798773
799774 /**
@@ -803,7 +778,7 @@ public void addOnTabSelectedListener(@Nullable BaseOnTabSelectedListener listene
803778 * @param listener listener to remove
804779 */
805780 public void removeOnTabSelectedListener (@ NonNull OnTabSelectedListener listener ) {
806- selectedListeners . remove ( listener );
781+ removeOnTabSelectedListener (( BaseOnTabSelectedListener ) listener );
807782 }
808783
809784 /**
@@ -815,48 +790,12 @@ public void removeOnTabSelectedListener(@NonNull OnTabSelectedListener listener)
815790 */
816791 @ Deprecated
817792 public void removeOnTabSelectedListener (@ Nullable BaseOnTabSelectedListener listener ) {
818- removeOnTabSelectedListener (wrapOnTabSelectedListener (listener ));
819- }
820-
821- /** @hide */
822- @ Nullable
823- @ RestrictTo (LIBRARY_GROUP )
824- protected OnTabSelectedListener wrapOnTabSelectedListener (
825- @ Nullable final BaseOnTabSelectedListener baseListener ) {
826- if (baseListener == null ) {
827- return null ;
828- }
829-
830- if (selectedListenerMap .containsKey (baseListener )) {
831- return selectedListenerMap .get (baseListener );
832- }
833-
834- OnTabSelectedListener listener =
835- new OnTabSelectedListener () {
836- @ Override
837- public void onTabSelected (Tab tab ) {
838- baseListener .onTabSelected (tab );
839- }
840-
841- @ Override
842- public void onTabUnselected (Tab tab ) {
843- baseListener .onTabUnselected (tab );
844- }
845-
846- @ Override
847- public void onTabReselected (Tab tab ) {
848- baseListener .onTabReselected (tab );
849- }
850- };
851-
852- selectedListenerMap .put (baseListener , listener );
853- return listener ;
793+ selectedListeners .remove (listener );
854794 }
855795
856796 /** Remove all previously added {@link TabLayout.OnTabSelectedListener}s. */
857797 public void clearOnTabSelectedListeners () {
858798 selectedListeners .clear ();
859- selectedListenerMap .clear ();
860799 }
861800
862801 /**
0 commit comments