mirror of
				https://git.tardis.systems/mirrors/yuzu
				synced 2025-11-03 20:24:43 +01:00 
			
		
		
		
	Merge pull request #12319 from t895/refresh-list-bug
android: Listen for directory selection in viewmodel
This commit is contained in:
		
						commit
						f447996080
					
				@ -14,8 +14,10 @@ import org.yuzu.yuzu_emu.R
 | 
			
		||||
import org.yuzu.yuzu_emu.databinding.DialogAddFolderBinding
 | 
			
		||||
import org.yuzu.yuzu_emu.model.GameDir
 | 
			
		||||
import org.yuzu.yuzu_emu.model.GamesViewModel
 | 
			
		||||
import org.yuzu.yuzu_emu.model.HomeViewModel
 | 
			
		||||
 | 
			
		||||
class AddGameFolderDialogFragment : DialogFragment() {
 | 
			
		||||
    private val homeViewModel: HomeViewModel by activityViewModels()
 | 
			
		||||
    private val gamesViewModel: GamesViewModel by activityViewModels()
 | 
			
		||||
 | 
			
		||||
    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
 | 
			
		||||
@ -30,6 +32,7 @@ class AddGameFolderDialogFragment : DialogFragment() {
 | 
			
		||||
            .setTitle(R.string.add_game_folder)
 | 
			
		||||
            .setPositiveButton(android.R.string.ok) { _: DialogInterface, _: Int ->
 | 
			
		||||
                val newGameDir = GameDir(folderUriString!!, binding.deepScanSwitch.isChecked)
 | 
			
		||||
                homeViewModel.setGamesDirSelected(true)
 | 
			
		||||
                gamesViewModel.addFolder(newGameDir)
 | 
			
		||||
            }
 | 
			
		||||
            .setNegativeButton(android.R.string.cancel, null)
 | 
			
		||||
 | 
			
		||||
@ -4,6 +4,7 @@
 | 
			
		||||
package org.yuzu.yuzu_emu.fragments
 | 
			
		||||
 | 
			
		||||
import android.Manifest
 | 
			
		||||
import android.annotation.SuppressLint
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
@ -75,6 +76,8 @@ class SetupFragment : Fragment() {
 | 
			
		||||
        return binding.root
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // This is using the correct scope, lint is just acting up
 | 
			
		||||
    @SuppressLint("UnsafeRepeatOnLifecycleDetector")
 | 
			
		||||
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
 | 
			
		||||
        mainActivity = requireActivity() as MainActivity
 | 
			
		||||
 | 
			
		||||
@ -206,7 +209,8 @@ class SetupFragment : Fragment() {
 | 
			
		||||
            )
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        viewLifecycleOwner.lifecycleScope.launch {
 | 
			
		||||
        viewLifecycleOwner.lifecycleScope.apply {
 | 
			
		||||
            launch {
 | 
			
		||||
                repeatOnLifecycle(Lifecycle.State.CREATED) {
 | 
			
		||||
                    homeViewModel.shouldPageForward.collect {
 | 
			
		||||
                        if (it) {
 | 
			
		||||
@ -216,6 +220,17 @@ class SetupFragment : Fragment() {
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            launch {
 | 
			
		||||
                repeatOnLifecycle(Lifecycle.State.CREATED) {
 | 
			
		||||
                    homeViewModel.gamesDirSelected.collect {
 | 
			
		||||
                        if (it) {
 | 
			
		||||
                            gamesDirCallback.onStepCompleted()
 | 
			
		||||
                            homeViewModel.setGamesDirSelected(false)
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        binding.viewPager2.apply {
 | 
			
		||||
            adapter = SetupAdapter(requireActivity() as AppCompatActivity, pages)
 | 
			
		||||
@ -339,7 +354,6 @@ class SetupFragment : Fragment() {
 | 
			
		||||
        registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) { result ->
 | 
			
		||||
            if (result != null) {
 | 
			
		||||
                mainActivity.processGamesDir(result)
 | 
			
		||||
                gamesDirCallback.onStepCompleted()
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -133,7 +133,7 @@ class GamesViewModel : ViewModel() {
 | 
			
		||||
        viewModelScope.launch {
 | 
			
		||||
            withContext(Dispatchers.IO) {
 | 
			
		||||
                NativeConfig.addGameDir(gameDir)
 | 
			
		||||
                getGameDirs()
 | 
			
		||||
                getGameDirs(true)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ package org.yuzu.yuzu_emu.model
 | 
			
		||||
import androidx.lifecycle.ViewModel
 | 
			
		||||
import kotlinx.coroutines.flow.MutableStateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.StateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.asStateFlow
 | 
			
		||||
 | 
			
		||||
class HomeViewModel : ViewModel() {
 | 
			
		||||
    val navigationVisible: StateFlow<Pair<Boolean, Boolean>> get() = _navigationVisible
 | 
			
		||||
@ -17,6 +18,9 @@ class HomeViewModel : ViewModel() {
 | 
			
		||||
    val shouldPageForward: StateFlow<Boolean> get() = _shouldPageForward
 | 
			
		||||
    private val _shouldPageForward = MutableStateFlow(false)
 | 
			
		||||
 | 
			
		||||
    private val _gamesDirSelected = MutableStateFlow(false)
 | 
			
		||||
    val gamesDirSelected get() = _gamesDirSelected.asStateFlow()
 | 
			
		||||
 | 
			
		||||
    var navigatedToSetup = false
 | 
			
		||||
 | 
			
		||||
    fun setNavigationVisibility(visible: Boolean, animated: Boolean) {
 | 
			
		||||
@ -36,4 +40,8 @@ class HomeViewModel : ViewModel() {
 | 
			
		||||
    fun setShouldPageForward(pageForward: Boolean) {
 | 
			
		||||
        _shouldPageForward.value = pageForward
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun setGamesDirSelected(selected: Boolean) {
 | 
			
		||||
        _gamesDirSelected.value = selected
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user