mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-04 04:34:07 +01:00 
			
		
		
		
	android: Simplify setup in search and games fragments
This commit is contained in:
		
							parent
							
								
									aa8a48e94c
								
							
						
					
					
						commit
						412c95e0b0
					
				@ -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
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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() {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user