summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt193
1 files changed, 67 insertions, 126 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
index aedc128d6..c3b2b11f8 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
@@ -32,9 +32,6 @@ import androidx.drawerlayout.widget.DrawerLayout
import androidx.drawerlayout.widget.DrawerLayout.DrawerListener
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
-import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.lifecycleScope
-import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.findNavController
import androidx.navigation.fragment.navArgs
import androidx.window.layout.FoldingFeature
@@ -42,9 +39,6 @@ import androidx.window.layout.WindowInfoTracker
import androidx.window.layout.WindowLayoutInfo
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.slider.Slider
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.flow.collectLatest
-import kotlinx.coroutines.launch
import org.yuzu.yuzu_emu.HomeNavigationDirections
import org.yuzu.yuzu_emu.NativeLibrary
import org.yuzu.yuzu_emu.R
@@ -91,14 +85,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
if (context is EmulationActivity) {
emulationActivity = context
NativeLibrary.setEmulationActivity(context)
-
- lifecycleScope.launch(Dispatchers.Main) {
- lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
- WindowInfoTracker.getOrCreate(context)
- .windowLayoutInfo(context)
- .collect { updateFoldableLayout(context, it) }
- }
- }
} else {
throw IllegalStateException("EmulationFragment must have EmulationActivity parent")
}
@@ -169,8 +155,6 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
return binding.root
}
- // This is using the correct scope, lint is just acting up
- @SuppressLint("UnsafeRepeatOnLifecycleDetector")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (requireActivity().isFinishing) {
@@ -351,129 +335,86 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
binding.loadingTitle.isSelected = true
binding.loadingText.isSelected = true
- viewLifecycleOwner.lifecycleScope.apply {
- launch {
- repeatOnLifecycle(Lifecycle.State.STARTED) {
- WindowInfoTracker.getOrCreate(requireContext())
- .windowLayoutInfo(requireActivity())
- .collect {
- updateFoldableLayout(requireActivity() as EmulationActivity, it)
- }
- }
+ WindowInfoTracker.getOrCreate(requireContext())
+ .windowLayoutInfo(requireActivity()).collect(viewLifecycleOwner) {
+ updateFoldableLayout(requireActivity() as EmulationActivity, it)
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.shaderProgress.collectLatest {
- if (it > 0 && it != emulationViewModel.totalShaders.value) {
- binding.loadingProgressIndicator.isIndeterminate = false
-
- if (it < binding.loadingProgressIndicator.max) {
- binding.loadingProgressIndicator.progress = it
- }
- }
+ emulationViewModel.shaderProgress.collect(viewLifecycleOwner) {
+ if (it > 0 && it != emulationViewModel.totalShaders.value) {
+ binding.loadingProgressIndicator.isIndeterminate = false
- if (it == emulationViewModel.totalShaders.value) {
- binding.loadingText.setText(R.string.loading)
- binding.loadingProgressIndicator.isIndeterminate = true
- }
- }
- }
- }
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.totalShaders.collectLatest {
- binding.loadingProgressIndicator.max = it
- }
+ if (it < binding.loadingProgressIndicator.max) {
+ binding.loadingProgressIndicator.progress = it
}
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.shaderMessage.collectLatest {
- if (it.isNotEmpty()) {
- binding.loadingText.text = it
- }
- }
- }
+
+ if (it == emulationViewModel.totalShaders.value) {
+ binding.loadingText.setText(R.string.loading)
+ binding.loadingProgressIndicator.isIndeterminate = true
}
- launch {
- repeatOnLifecycle(Lifecycle.State.RESUMED) {
- driverViewModel.isInteractionAllowed.collect {
- if (it) {
- startEmulation()
- }
- }
- }
+ }
+ emulationViewModel.totalShaders.collect(viewLifecycleOwner) {
+ binding.loadingProgressIndicator.max = it
+ }
+ emulationViewModel.shaderMessage.collect(viewLifecycleOwner) {
+ if (it.isNotEmpty()) {
+ binding.loadingText.text = it
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.emulationStarted.collectLatest {
- if (it) {
- binding.drawerLayout.setDrawerLockMode(IntSetting.LOCK_DRAWER.getInt())
- ViewUtils.showView(binding.surfaceInputOverlay)
- ViewUtils.hideView(binding.loadingIndicator)
-
- emulationState.updateSurface()
-
- // Setup overlays
- updateShowFpsOverlay()
- updateThermalOverlay()
- }
- }
- }
+ }
+
+ emulationViewModel.emulationStarted.collect(viewLifecycleOwner) {
+ if (it) {
+ binding.drawerLayout.setDrawerLockMode(IntSetting.LOCK_DRAWER.getInt())
+ ViewUtils.showView(binding.surfaceInputOverlay)
+ ViewUtils.hideView(binding.loadingIndicator)
+
+ emulationState.updateSurface()
+
+ // Setup overlays
+ updateShowFpsOverlay()
+ updateThermalOverlay()
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.isEmulationStopping.collectLatest {
- if (it) {
- binding.loadingText.setText(R.string.shutting_down)
- ViewUtils.showView(binding.loadingIndicator)
- ViewUtils.hideView(binding.inputContainer)
- ViewUtils.hideView(binding.showFpsText)
- }
- }
- }
+ }
+ emulationViewModel.isEmulationStopping.collect(viewLifecycleOwner) {
+ if (it) {
+ binding.loadingText.setText(R.string.shutting_down)
+ ViewUtils.showView(binding.loadingIndicator)
+ ViewUtils.hideView(binding.inputContainer)
+ ViewUtils.hideView(binding.showFpsText)
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.drawerOpen.collect {
- if (it) {
- binding.drawerLayout.open()
- binding.inGameMenu.requestFocus()
- } else {
- binding.drawerLayout.close()
- }
- }
- }
+ }
+ emulationViewModel.drawerOpen.collect(viewLifecycleOwner) {
+ if (it) {
+ binding.drawerLayout.open()
+ binding.inGameMenu.requestFocus()
+ } else {
+ binding.drawerLayout.close()
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.programChanged.collect {
- if (it != 0) {
- emulationViewModel.setEmulationStarted(false)
- binding.drawerLayout.close()
- binding.drawerLayout
- .setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
- ViewUtils.hideView(binding.surfaceInputOverlay)
- ViewUtils.showView(binding.loadingIndicator)
- }
- }
- }
+ }
+ emulationViewModel.programChanged.collect(viewLifecycleOwner) {
+ if (it != 0) {
+ emulationViewModel.setEmulationStarted(false)
+ binding.drawerLayout.close()
+ binding.drawerLayout
+ .setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
+ ViewUtils.hideView(binding.surfaceInputOverlay)
+ ViewUtils.showView(binding.loadingIndicator)
}
- launch {
- repeatOnLifecycle(Lifecycle.State.CREATED) {
- emulationViewModel.emulationStopped.collect {
- if (it && emulationViewModel.programChanged.value != -1) {
- if (perfStatsUpdater != null) {
- perfStatsUpdateHandler.removeCallbacks(perfStatsUpdater!!)
- }
- emulationState.changeProgram(emulationViewModel.programChanged.value)
- emulationViewModel.setProgramChanged(-1)
- emulationViewModel.setEmulationStopped(false)
- }
- }
+ }
+ emulationViewModel.emulationStopped.collect(viewLifecycleOwner) {
+ if (it && emulationViewModel.programChanged.value != -1) {
+ if (perfStatsUpdater != null) {
+ perfStatsUpdateHandler.removeCallbacks(perfStatsUpdater!!)
}
+ emulationState.changeProgram(emulationViewModel.programChanged.value)
+ emulationViewModel.setProgramChanged(-1)
+ emulationViewModel.setEmulationStopped(false)
}
}
+
+ driverViewModel.isInteractionAllowed.collect(viewLifecycleOwner) {
+ if (it) startEmulation()
+ }
}
private fun startEmulation(programIndex: Int = 0) {