Quellcode durchsuchen

feat: hook setCurrentItemInternal,首页smoothScroll都走false

XiaodongLin vor 6 Monaten
Ursprung
Commit
59583683e0

+ 27 - 12
app/src/main/java/com/adealink/weparty/apm/HookTest.kt

@@ -41,15 +41,30 @@ class ScrollEventAdapterMethod : MatchClassMethod {
 }
 
 
-//@AndroidAopMatchClassMethod(
-//    targetClassName = "android.view.View.OnClickListener",
-//    methodName = ["onClick"],
-//    type = MatchType.EXTENDS //type 一定是 EXTENDS 因为你想 hook 所有继承了 OnClickListener 的类
-//)
-//class MatchOnClick : MatchClassMethod {
-//    //    @SingleClick(5000) //联合 @SingleClick ,给所有点击增加防多点,6不6
-//    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
-//        Log.e("MatchOnClick", "=====invoke=====$methodName")
-//        return joinPoint.proceed()
-//    }
-//}
+@AndroidAopMatchClassMethod(
+    targetClassName = "androidx.viewpager2.widget.ViewPager2",
+    methodName = ["setCurrentItemInternal"],
+    type = MatchType.SELF
+)
+class SetCurrentItemInternalMethod : MatchClassMethod {
+    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
+        try {
+            val target = joinPoint.target
+            if (target != null) {
+                val mViewPager = target as ViewPager2
+                val viewPagerIdString = mViewPager.resources?.getResourceEntryName(mViewPager.id)
+                val args = joinPoint.args
+                val item = args?.getOrNull(0) as? Int
+                val smoothScroll = args?.getOrNull(1) as? Boolean
+                Log.i(
+                    "SetCurrentItemInternal",
+                    "=====setCurrentItemInternal=====${mViewPager}, viewPager:$viewPagerIdString, currentItem:${mViewPager.currentItem}, " +
+                            "${mViewPager.adapter?.javaClass?.name}, setItem:$item, smoothScroll:$smoothScroll"
+                )
+            }
+        } catch (e: Exception) {
+
+        }
+        return joinPoint.proceed()
+    }
+}

+ 3 - 2
app/src/main/java/com/adealink/weparty/commonui/widget/CommonTabLayout.kt

@@ -186,14 +186,15 @@ class CommonTabLayout @JvmOverloads constructor(
         tabFragmentStateAdapter: BaseTabFragmentStateAdapter?,
         currentItem: Int,
         showIndicator: Boolean = true,
-        scrollToTop: (() -> Unit)? = null
+        scrollToTop: (() -> Unit)? = null,
+        smoothScroll: Boolean = true
     ) {
         this.viewPager2 = viewPager2
         this.tabFragmentStateAdapter = tabFragmentStateAdapter
         this.scrollToTop = scrollToTop
         viewPager2?.let {
             TabLayoutMediator(
-                tabLayout, it
+                tabLayout, it, true, smoothScroll
             ) { tab: TabLayout.Tab, position: Int ->
                 run {
                     if (tabType == TYPE_WRAP_CONTENT) {

+ 1 - 1
app/src/main/java/com/adealink/weparty/commonui/widget/tablayout/TabLayoutMediatorViewModel.kt

@@ -59,7 +59,7 @@ class TabLayoutMediatorViewModel : BaseViewModel(), ITabLayoutMediatorViewModel
             Log.d(TAG, "tryReAttach return, for viewPager($viewPager) is null")
             return
         }
-        mediator = TabLayoutMediator(tabLayout, viewPager, tabStrategy).also { it.attach() }
+        mediator = TabLayoutMediator(tabLayout, viewPager, true,false,tabStrategy).also { it.attach() }
     }
 
 

+ 2 - 1
app/src/main/java/com/adealink/weparty/module/userlist/HomeUserListFragment.kt

@@ -105,7 +105,8 @@ class HomeUserListFragment : BaseFragment(R.layout.fragment_home_user_list), ISc
             currentItem = defaultPos,
             scrollToTop = {
                 scrollToTop()
-            }
+            },
+            smoothScroll = false
         )
 
         binding.btnFilter.onClick {

+ 1 - 1
module/follow/src/main/java/com/adealink/weparty/follow/FriendHomeFragment.kt

@@ -32,7 +32,7 @@ class FriendHomeFragment : BaseFragment(R.layout.fragment_friend_home), IScrollM
         super.initViews()
         binding.viewPager.adapter = pageAdapter
         TabLayoutMediator(
-            binding.friendTabLayout, binding.viewPager
+            binding.friendTabLayout, binding.viewPager,true,false
         ) { tab: Tab, position: Int ->
             run {
                 tab.setCustomView(R.layout.layout_friend_tab)

+ 2 - 1
module/message/src/main/java/com/adealink/weparty/message/MessageHomeFragment.kt

@@ -94,7 +94,8 @@ class MessageHomeFragment : BaseFragment(R.layout.fragment_message_home), IScrol
             currentItem = defaultPos,
             scrollToTop = {
                 scrollToTop()
-            }
+            },
+            smoothScroll=false
         )
 
         binding.btnClearUnreadMsg.onClick(5000) {

+ 2 - 1
module/moment/src/main/java/com/adealink/weparty/moment/usermoment/MomentFragment.kt

@@ -95,7 +95,8 @@ class MomentFragment : BaseFragment(R.layout.fragment_moment), IMomentListener,
             currentItem = defaultPos,
             scrollToTop = {
                 scrollToTop()
-            }
+            },
+            smoothScroll = false
         )
         binding.ivCreate.setOnClickListener {
             startActivity(Intent(context, MomentPublishActivity::class.java))

+ 2 - 1
module/room/src/main/java/com/adealink/weparty/room/roomlist/RoomListFragment.kt

@@ -89,7 +89,8 @@ class RoomListFragment : BaseFragment(R.layout.fragment_room_list), IScrollManag
             currentItem = 0,
             scrollToTop = {
                 scrollToTop()
-            }
+            },
+            smoothScroll = false
         )
         binding.roomListViewPage.registerOnPageChangeCallback(object :
             ViewPager2.OnPageChangeCallback() {

+ 1 - 1
module/room/src/main/java/com/adealink/weparty/room/roomlist/country/CountryRoomListViewBinder.kt

@@ -114,7 +114,7 @@ class CountryRoomListViewBinder(
 
                 val index = pagerAdapter.getPosBy(it.selectedCountryCode)
                 if (index != -1) {
-                    binding.vpCountryList.currentItem = index
+                    binding.vpCountryList.setCurrentItem(index,false)
                 }
             }
         }

+ 3 - 2
module/room/src/main/java/com/adealink/weparty/room/roomlist/mine/MineRoomListFragment.kt

@@ -73,7 +73,8 @@ class MineRoomListFragment : BaseFragment(R.layout.fragment_mine_room_list), ISc
             binding.roomListViewPage,
             roomListPageAdapter,
             0,
-            false
+            false,
+            smoothScroll = false
         )
         binding.roomListViewPage.registerOnPageChangeCallback(object :
             ViewPager2.OnPageChangeCallback() {
@@ -83,7 +84,7 @@ class MineRoomListFragment : BaseFragment(R.layout.fragment_mine_room_list), ISc
         })
         val currentPosition = TABS.indexOf(currentPageIndex)
         if (currentPosition >= 0) {
-            binding.roomListViewPage.currentItem = currentPosition
+            binding.roomListViewPage.setCurrentItem(currentPosition,false)
         }
     }