From f590e6688cc651a7dfaaafd14c71207fd0ca5bc7 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Sun, 10 Sep 2023 07:22:08 +0530 Subject: [PATCH] refactor: Use allViews extension --- .../libretube/ui/activities/MainActivity.kt | 35 +++++++------------ 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt index 4c01ae85e..a87035c66 100644 --- a/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/ui/activities/MainActivity.kt @@ -6,13 +6,14 @@ import android.content.res.Configuration import android.os.Bundle import android.view.Menu import android.view.MenuItem -import android.view.ViewGroup +import android.view.View import android.widget.ScrollView import androidx.activity.addCallback import androidx.activity.viewModels import androidx.appcompat.widget.SearchView import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.os.bundleOf +import androidx.core.view.allViews import androidx.core.view.children import androidx.core.view.isVisible import androidx.core.widget.NestedScrollView @@ -116,10 +117,10 @@ class MainActivity : BaseActivity() { } else { // get the host fragment containing the current fragment val navHostFragment = - supportFragmentManager.findFragmentById(R.id.fragment) as NavHostFragment? + supportFragmentManager.findFragmentById(R.id.fragment) as? NavHostFragment // get the current fragment - val fragment = navHostFragment?.childFragmentManager?.fragments?.getOrNull(0) - tryScrollToTop(fragment?.requireView() as? ViewGroup) + val fragment = navHostFragment?.childFragmentManager?.fragments?.firstOrNull() + tryScrollToTop(fragment?.requireView()) } } @@ -193,25 +194,13 @@ class MainActivity : BaseActivity() { /** * Try to find a scroll or recycler view and scroll it back to the top */ - private fun tryScrollToTop(viewGroup: ViewGroup?) { - (viewGroup as? ScrollView)?.scrollTo(0, 0) - - if (viewGroup == null || viewGroup.childCount == 0) return - - viewGroup.children.forEach { - (it as? ScrollView)?.let { scrollView -> - scrollView.smoothScrollTo(0, 0) - return - } - (it as? NestedScrollView)?.let { scrollView -> - scrollView.smoothScrollTo(0, 0) - return - } - (it as? RecyclerView)?.let { recyclerView -> - recyclerView.smoothScrollToPosition(0) - return - } - tryScrollToTop(it as? ViewGroup) + private fun tryScrollToTop(view: View?) { + val scrollView = view?.allViews + ?.firstOrNull { it is ScrollView || it is NestedScrollView || it is RecyclerView } + when (scrollView) { + is ScrollView -> scrollView.smoothScrollTo(0, 0) + is NestedScrollView -> scrollView.smoothScrollTo(0, 0) + is RecyclerView -> scrollView.smoothScrollToPosition(0) } }