summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar t8952024-01-25 20:39:52 -0500
committerGravatar t8952024-01-25 20:39:52 -0500
commit68cbf67f4c852d0dc3745dcacc8f0a40e4595f1d (patch)
tree91e5f930f8f26b64e76fd7effbfec7e5051d7118 /src
parentMerge pull request #12759 from liamwhite/mp-misc (diff)
downloadyuzu-68cbf67f4c852d0dc3745dcacc8f0a40e4595f1d.tar.gz
yuzu-68cbf67f4c852d0dc3745dcacc8f0a40e4595f1d.tar.xz
yuzu-68cbf67f4c852d0dc3745dcacc8f0a40e4595f1d.zip
android: Focus on the in game menu when opened
Diffstat (limited to 'src')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt8
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt29
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt8
-rw-r--r--src/android/app/src/main/res/layout/fragment_emulation.xml1
4 files changed, 39 insertions, 7 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
index 9b08f008d..26cddecf4 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
@@ -193,6 +193,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
193 return super.dispatchKeyEvent(event) 193 return super.dispatchKeyEvent(event)
194 } 194 }
195 195
196 if (emulationViewModel.drawerOpen.value) {
197 return super.dispatchKeyEvent(event)
198 }
199
196 return InputHandler.dispatchKeyEvent(event) 200 return InputHandler.dispatchKeyEvent(event)
197 } 201 }
198 202
@@ -203,6 +207,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
203 return super.dispatchGenericMotionEvent(event) 207 return super.dispatchGenericMotionEvent(event)
204 } 208 }
205 209
210 if (emulationViewModel.drawerOpen.value) {
211 return super.dispatchGenericMotionEvent(event)
212 }
213
206 // Don't attempt to do anything if we are disconnecting a device. 214 // Don't attempt to do anything if we are disconnecting a device.
207 if (event.actionMasked == MotionEvent.ACTION_CANCEL) { 215 if (event.actionMasked == MotionEvent.ACTION_CANCEL) {
208 return true 216 return true
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 d17e087fe..22da1d0e5 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
@@ -38,6 +38,7 @@ import androidx.window.layout.WindowLayoutInfo
38import com.google.android.material.dialog.MaterialAlertDialogBuilder 38import com.google.android.material.dialog.MaterialAlertDialogBuilder
39import com.google.android.material.slider.Slider 39import com.google.android.material.slider.Slider
40import kotlinx.coroutines.Dispatchers 40import kotlinx.coroutines.Dispatchers
41import kotlinx.coroutines.flow.collect
41import kotlinx.coroutines.flow.collectLatest 42import kotlinx.coroutines.flow.collectLatest
42import kotlinx.coroutines.launch 43import kotlinx.coroutines.launch
43import org.yuzu.yuzu_emu.HomeNavigationDirections 44import org.yuzu.yuzu_emu.HomeNavigationDirections
@@ -184,10 +185,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
184 185
185 override fun onDrawerOpened(drawerView: View) { 186 override fun onDrawerOpened(drawerView: View) {
186 binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED) 187 binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
188 binding.inGameMenu.requestFocus()
189 emulationViewModel.setDrawerOpen(true)
187 } 190 }
188 191
189 override fun onDrawerClosed(drawerView: View) { 192 override fun onDrawerClosed(drawerView: View) {
190 binding.drawerLayout.setDrawerLockMode(IntSetting.LOCK_DRAWER.getInt()) 193 binding.drawerLayout.setDrawerLockMode(IntSetting.LOCK_DRAWER.getInt())
194 emulationViewModel.setDrawerOpen(false)
191 } 195 }
192 196
193 override fun onDrawerStateChanged(newState: Int) { 197 override fun onDrawerStateChanged(newState: Int) {
@@ -239,6 +243,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
239 requireContext().theme 243 requireContext().theme
240 ) 244 )
241 } 245 }
246 binding.inGameMenu.requestFocus()
242 true 247 true
243 } 248 }
244 249
@@ -247,6 +252,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
247 null, 252 null,
248 Settings.MenuTag.SECTION_ROOT 253 Settings.MenuTag.SECTION_ROOT
249 ) 254 )
255 binding.inGameMenu.requestFocus()
250 binding.root.findNavController().navigate(action) 256 binding.root.findNavController().navigate(action)
251 true 257 true
252 } 258 }
@@ -256,6 +262,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
256 args.game, 262 args.game,
257 Settings.MenuTag.SECTION_ROOT 263 Settings.MenuTag.SECTION_ROOT
258 ) 264 )
265 binding.inGameMenu.requestFocus()
259 binding.root.findNavController().navigate(action) 266 binding.root.findNavController().navigate(action)
260 true 267 true
261 } 268 }
@@ -287,6 +294,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
287 ) 294 )
288 } 295 }
289 } 296 }
297 binding.inGameMenu.requestFocus()
290 NativeConfig.saveGlobalConfig() 298 NativeConfig.saveGlobalConfig()
291 true 299 true
292 } 300 }
@@ -295,7 +303,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
295 emulationState.stop() 303 emulationState.stop()
296 emulationViewModel.setIsEmulationStopping(true) 304 emulationViewModel.setIsEmulationStopping(true)
297 binding.drawerLayout.close() 305 binding.drawerLayout.close()
298 binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED) 306 binding.inGameMenu.requestFocus()
299 true 307 true
300 } 308 }
301 309
@@ -312,12 +320,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
312 if (!NativeLibrary.isRunning()) { 320 if (!NativeLibrary.isRunning()) {
313 return 321 return
314 } 322 }
315 323 emulationViewModel.setDrawerOpen(!binding.drawerLayout.isOpen)
316 if (binding.drawerLayout.isOpen) {
317 binding.drawerLayout.close()
318 } else {
319 binding.drawerLayout.open()
320 }
321 } 324 }
322 } 325 }
323 ) 326 )
@@ -408,6 +411,18 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
408 } 411 }
409 } 412 }
410 } 413 }
414 launch {
415 repeatOnLifecycle(Lifecycle.State.CREATED) {
416 emulationViewModel.drawerOpen.collect {
417 if (it) {
418 binding.drawerLayout.open()
419 binding.inGameMenu.requestFocus()
420 } else {
421 binding.drawerLayout.close()
422 }
423 }
424 }
425 }
411 } 426 }
412 } 427 }
413 428
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt
index f34870c2d..b66f47fe7 100644
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt
@@ -6,6 +6,7 @@ package org.yuzu.yuzu_emu.model
6import androidx.lifecycle.ViewModel 6import androidx.lifecycle.ViewModel
7import kotlinx.coroutines.flow.MutableStateFlow 7import kotlinx.coroutines.flow.MutableStateFlow
8import kotlinx.coroutines.flow.StateFlow 8import kotlinx.coroutines.flow.StateFlow
9import kotlinx.coroutines.flow.asStateFlow
9 10
10class EmulationViewModel : ViewModel() { 11class EmulationViewModel : ViewModel() {
11 val emulationStarted: StateFlow<Boolean> get() = _emulationStarted 12 val emulationStarted: StateFlow<Boolean> get() = _emulationStarted
@@ -23,6 +24,9 @@ class EmulationViewModel : ViewModel() {
23 val shaderMessage: StateFlow<String> get() = _shaderMessage 24 val shaderMessage: StateFlow<String> get() = _shaderMessage
24 private val _shaderMessage = MutableStateFlow("") 25 private val _shaderMessage = MutableStateFlow("")
25 26
27 private val _drawerOpen = MutableStateFlow(false)
28 val drawerOpen = _drawerOpen.asStateFlow()
29
26 fun setEmulationStarted(started: Boolean) { 30 fun setEmulationStarted(started: Boolean) {
27 _emulationStarted.value = started 31 _emulationStarted.value = started
28 } 32 }
@@ -49,6 +53,10 @@ class EmulationViewModel : ViewModel() {
49 setTotalShaders(max) 53 setTotalShaders(max)
50 } 54 }
51 55
56 fun setDrawerOpen(value: Boolean) {
57 _drawerOpen.value = value
58 }
59
52 fun clear() { 60 fun clear() {
53 setEmulationStarted(false) 61 setEmulationStarted(false)
54 setIsEmulationStopping(false) 62 setIsEmulationStopping(false)
diff --git a/src/android/app/src/main/res/layout/fragment_emulation.xml b/src/android/app/src/main/res/layout/fragment_emulation.xml
index 5252adf54..988bbb373 100644
--- a/src/android/app/src/main/res/layout/fragment_emulation.xml
+++ b/src/android/app/src/main/res/layout/fragment_emulation.xml
@@ -160,6 +160,7 @@
160 android:layout_width="wrap_content" 160 android:layout_width="wrap_content"
161 android:layout_height="match_parent" 161 android:layout_height="match_parent"
162 android:layout_gravity="start" 162 android:layout_gravity="start"
163 android:focusedByDefault="true"
163 app:headerLayout="@layout/header_in_game" 164 app:headerLayout="@layout/header_in_game"
164 app:menu="@menu/menu_in_game" 165 app:menu="@menu/menu_in_game"
165 tools:visibility="gone" /> 166 tools:visibility="gone" />