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