From 412c95e0b0515aa0211c7e7612ce237c23a7938e Mon Sep 17 00:00:00 2001
From: Charles Lombardo <clombardo169@gmail.com>
Date: Mon, 22 May 2023 16:20:51 -0400
Subject: [PATCH] android: Simplify setup in search and games fragments

---
 .../yuzu/yuzu_emu/fragments/SearchFragment.kt | 30 ++++---
 .../org/yuzu/yuzu_emu/ui/GamesFragment.kt     | 89 ++++++++++---------
 2 files changed, 62 insertions(+), 57 deletions(-)

diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
index f6aa370f0..eb4f513d1 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/SearchFragment.kt
@@ -61,13 +61,6 @@ class SearchFragment : Fragment() {
             binding.searchText.setText(savedInstanceState.getString(SEARCH_TEXT))
         }
 
-        gamesViewModel.searchFocused.observe(viewLifecycleOwner) { searchFocused ->
-            if (searchFocused) {
-                focusSearch()
-                gamesViewModel.setSearchFocused(false)
-            }
-        }
-
         binding.gridGamesSearch.apply {
             layoutManager = AutofitGridLayoutManager(
                 requireContext(),
@@ -87,13 +80,22 @@ class SearchFragment : Fragment() {
             filterAndSearch()
         }
 
-        gamesViewModel.games.observe(viewLifecycleOwner) { filterAndSearch() }
-        gamesViewModel.searchedGames.observe(viewLifecycleOwner) {
-            (binding.gridGamesSearch.adapter as GameAdapter).submitList(it)
-            if (it.isEmpty()) {
-                binding.noResultsView.visibility = View.VISIBLE
-            } else {
-                binding.noResultsView.visibility = View.GONE
+        gamesViewModel.apply {
+            searchFocused.observe(viewLifecycleOwner) { searchFocused ->
+                if (searchFocused) {
+                    focusSearch()
+                    gamesViewModel.setSearchFocused(false)
+                }
+            }
+
+            games.observe(viewLifecycleOwner) { filterAndSearch() }
+            searchedGames.observe(viewLifecycleOwner) {
+                (binding.gridGamesSearch.adapter as GameAdapter).submitList(it)
+                if (it.isEmpty()) {
+                    binding.noResultsView.visibility = View.VISIBLE
+                } else {
+                    binding.noResultsView.visibility = View.GONE
+                }
             }
         }
 
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt
index afabfb2b9..97eef40d2 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt
@@ -55,62 +55,65 @@ class GamesFragment : Fragment() {
             adapter = GameAdapter(requireActivity() as AppCompatActivity)
         }
 
-        // Add swipe down to refresh gesture
-        binding.swipeRefresh.setOnRefreshListener {
-            gamesViewModel.reloadGames(false)
-        }
+        binding.swipeRefresh.apply {
+            // Add swipe down to refresh gesture
+            setOnRefreshListener {
+                gamesViewModel.reloadGames(false)
+            }
 
-        // Set theme color to the refresh animation's background
-        binding.swipeRefresh.setProgressBackgroundColorSchemeColor(
-            MaterialColors.getColor(
-                binding.swipeRefresh,
-                com.google.android.material.R.attr.colorPrimary
+            // Set theme color to the refresh animation's background
+            setProgressBackgroundColorSchemeColor(
+                MaterialColors.getColor(
+                    binding.swipeRefresh,
+                    com.google.android.material.R.attr.colorPrimary
+                )
             )
-        )
-        binding.swipeRefresh.setColorSchemeColors(
-            MaterialColors.getColor(
-                binding.swipeRefresh,
-                com.google.android.material.R.attr.colorOnPrimary
+            setColorSchemeColors(
+                MaterialColors.getColor(
+                    binding.swipeRefresh,
+                    com.google.android.material.R.attr.colorOnPrimary
+                )
             )
-        )
 
-        // Watch for when we get updates to any of our games lists
-        gamesViewModel.isReloading.observe(viewLifecycleOwner) { isReloading ->
-            binding.swipeRefresh.isRefreshing = isReloading
-        }
-        gamesViewModel.games.observe(viewLifecycleOwner) {
-            (binding.gridGames.adapter as GameAdapter).submitList(it)
-            if (it.isEmpty()) {
-                binding.noticeText.visibility = View.VISIBLE
-            } else {
-                binding.noticeText.visibility = View.GONE
+            // Make sure the loading indicator appears even if the layout is told to refresh before being fully drawn
+            post {
+                if (_binding == null) {
+                    return@post
+                }
+                binding.swipeRefresh.isRefreshing = gamesViewModel.isReloading.value!!
             }
         }
 
-        gamesViewModel.shouldSwapData.observe(viewLifecycleOwner) { shouldSwapData ->
-            if (shouldSwapData) {
-                (binding.gridGames.adapter as GameAdapter).submitList(gamesViewModel.games.value!!)
-                gamesViewModel.setShouldSwapData(false)
+        gamesViewModel.apply {
+            // Watch for when we get updates to any of our games lists
+            isReloading.observe(viewLifecycleOwner) { isReloading ->
+                binding.swipeRefresh.isRefreshing = isReloading
+            }
+            games.observe(viewLifecycleOwner) {
+                (binding.gridGames.adapter as GameAdapter).submitList(it)
+                if (it.isEmpty()) {
+                    binding.noticeText.visibility = View.VISIBLE
+                } else {
+                    binding.noticeText.visibility = View.GONE
+                }
+            }
+            shouldSwapData.observe(viewLifecycleOwner) { shouldSwapData ->
+                if (shouldSwapData) {
+                    (binding.gridGames.adapter as GameAdapter).submitList(gamesViewModel.games.value!!)
+                    gamesViewModel.setShouldSwapData(false)
+                }
             }
-        }
 
-        // Check if the user reselected the games menu item and then scroll to top of the list
-        gamesViewModel.shouldScrollToTop.observe(viewLifecycleOwner) { shouldScroll ->
-            if (shouldScroll) {
-                scrollToTop()
-                gamesViewModel.setShouldScrollToTop(false)
+            // Check if the user reselected the games menu item and then scroll to top of the list
+            shouldScrollToTop.observe(viewLifecycleOwner) { shouldScroll ->
+                if (shouldScroll) {
+                    scrollToTop()
+                    gamesViewModel.setShouldScrollToTop(false)
+                }
             }
         }
 
         setInsets()
-
-        // Make sure the loading indicator appears even if the layout is told to refresh before being fully drawn
-        binding.swipeRefresh.post {
-            if (_binding == null) {
-                return@post
-            }
-            binding.swipeRefresh.isRefreshing = gamesViewModel.isReloading.value!!
-        }
     }
 
     override fun onDestroyView() {