mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 08:59:03 -06:00 
			
		
		
		
	android: Scroll shortcut for games list
If you reselect the "Games" menu item in the bottom navigation menu, the list smoothly scrolls to the top.
This commit is contained in:
		@@ -26,6 +26,9 @@ class GamesViewModel : ViewModel() {
 | 
			
		||||
    private val _shouldSwapData = MutableLiveData(false)
 | 
			
		||||
    val shouldSwapData: LiveData<Boolean> get() = _shouldSwapData
 | 
			
		||||
 | 
			
		||||
    private val _shouldScrollToTop = MutableLiveData(false)
 | 
			
		||||
    val shouldScrollToTop: LiveData<Boolean> get() = _shouldScrollToTop
 | 
			
		||||
 | 
			
		||||
    init {
 | 
			
		||||
        reloadGames(false)
 | 
			
		||||
    }
 | 
			
		||||
@@ -38,6 +41,10 @@ class GamesViewModel : ViewModel() {
 | 
			
		||||
        _shouldSwapData.postValue(shouldSwap)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun setShouldScrollToTop(shouldScroll: Boolean) {
 | 
			
		||||
        _shouldScrollToTop.postValue(shouldScroll)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun reloadGames(directoryChanged: Boolean) {
 | 
			
		||||
        if (isReloading.value == true)
 | 
			
		||||
            return
 | 
			
		||||
 
 | 
			
		||||
@@ -138,6 +138,14 @@ class GamesFragment : Fragment() {
 | 
			
		||||
            searchHidden()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 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)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        setInsets()
 | 
			
		||||
 | 
			
		||||
        // Make sure the loading indicator appears even if the layout is told to refresh before being fully drawn
 | 
			
		||||
@@ -191,6 +199,12 @@ class GamesFragment : Fragment() {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun scrollToTop() {
 | 
			
		||||
        if (_binding != null) {
 | 
			
		||||
            binding.gridGames.smoothScrollToPosition(0)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun setInsets() =
 | 
			
		||||
        ViewCompat.setOnApplyWindowInsetsListener(binding.gridGames) { view: View, windowInsets: WindowInsetsCompat ->
 | 
			
		||||
            val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
 | 
			
		||||
 
 | 
			
		||||
@@ -25,6 +25,7 @@ import androidx.preference.PreferenceManager
 | 
			
		||||
import com.google.android.material.color.MaterialColors
 | 
			
		||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
 | 
			
		||||
import com.google.android.material.elevation.ElevationOverlayProvider
 | 
			
		||||
import com.google.android.material.navigation.NavigationBarView
 | 
			
		||||
import kotlinx.coroutines.Dispatchers
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import kotlinx.coroutines.withContext
 | 
			
		||||
@@ -73,6 +74,11 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
 | 
			
		||||
        val navHostFragment =
 | 
			
		||||
            supportFragmentManager.findFragmentById(R.id.fragment_container) as NavHostFragment
 | 
			
		||||
        setUpNavigation(navHostFragment.navController)
 | 
			
		||||
        (binding.navigationBar as NavigationBarView).setOnItemReselectedListener {
 | 
			
		||||
            if (it.itemId == R.id.gamesFragment) {
 | 
			
		||||
                gamesViewModel.setShouldScrollToTop(true)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.statusBarShade.setBackgroundColor(
 | 
			
		||||
            MaterialColors.getColor(
 | 
			
		||||
@@ -243,7 +249,13 @@ class MainActivity : AppCompatActivity(), ThemeProvider {
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
            val dstPath = DirectoryInitialization.userDirectory + "/keys/"
 | 
			
		||||
            if (FileUtil.copyUriToInternalStorage(applicationContext, result, dstPath, "prod.keys")) {
 | 
			
		||||
            if (FileUtil.copyUriToInternalStorage(
 | 
			
		||||
                    applicationContext,
 | 
			
		||||
                    result,
 | 
			
		||||
                    dstPath,
 | 
			
		||||
                    "prod.keys"
 | 
			
		||||
                )
 | 
			
		||||
            ) {
 | 
			
		||||
                if (NativeLibrary.reloadKeys()) {
 | 
			
		||||
                    Toast.makeText(
 | 
			
		||||
                        applicationContext,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user