Explorar el Código

Merge pull request #12796 from t895/controller-optimizations

android: Controller focus optimizations
liamwhite hace 2 años
padre
commit
4526fdaf64
Se han modificado 25 ficheros con 247 adiciones y 24 borrados
  1. 8 0
      src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt
  2. 1 1
      src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt
  3. 22 7
      src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt
  4. 8 0
      src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt
  5. 4 1
      src/android/app/src/main/res/layout-w600dp/fragment_about.xml
  6. 155 0
      src/android/app/src/main/res/layout-w600dp/fragment_game_info.xml
  7. 1 0
      src/android/app/src/main/res/layout-w600dp/fragment_game_properties.xml
  8. 1 0
      src/android/app/src/main/res/layout/card_driver_option.xml
  9. 2 4
      src/android/app/src/main/res/layout/card_folder.xml
  10. 4 1
      src/android/app/src/main/res/layout/fragment_about.xml
  11. 4 0
      src/android/app/src/main/res/layout/fragment_addons.xml
  12. 3 1
      src/android/app/src/main/res/layout/fragment_applet_launcher.xml
  13. 2 0
      src/android/app/src/main/res/layout/fragment_driver_manager.xml
  14. 4 1
      src/android/app/src/main/res/layout/fragment_early_access.xml
  15. 6 2
      src/android/app/src/main/res/layout/fragment_emulation.xml
  16. 3 0
      src/android/app/src/main/res/layout/fragment_folders.xml
  17. 3 0
      src/android/app/src/main/res/layout/fragment_game_info.xml
  18. 3 2
      src/android/app/src/main/res/layout/fragment_game_properties.xml
  19. 1 0
      src/android/app/src/main/res/layout/fragment_games.xml
  20. 2 1
      src/android/app/src/main/res/layout/fragment_home_settings.xml
  21. 3 1
      src/android/app/src/main/res/layout/fragment_installables.xml
  22. 3 1
      src/android/app/src/main/res/layout/fragment_licenses.xml
  23. 2 0
      src/android/app/src/main/res/layout/fragment_settings.xml
  24. 1 1
      src/android/app/src/main/res/layout/list_item_addon.xml
  25. 1 0
      src/android/app/src/main/res/layout/list_item_settings_header.xml

+ 8 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/activities/EmulationActivity.kt

@@ -193,6 +193,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
             return super.dispatchKeyEvent(event)
         }
 
+        if (emulationViewModel.drawerOpen.value) {
+            return super.dispatchKeyEvent(event)
+        }
+
         return InputHandler.dispatchKeyEvent(event)
     }
 
@@ -203,6 +207,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener {
             return super.dispatchGenericMotionEvent(event)
         }
 
+        if (emulationViewModel.drawerOpen.value) {
+            return super.dispatchGenericMotionEvent(event)
+        }
+
         // Don't attempt to do anything if we are disconnecting a device.
         if (event.actionMasked == MotionEvent.ACTION_CANCEL) {
             return true

+ 1 - 1
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt

@@ -77,7 +77,7 @@ class AboutFragment : Fragment() {
         }
 
         binding.textVersionName.text = BuildConfig.VERSION_NAME
-        binding.textVersionName.setOnClickListener {
+        binding.buttonVersionName.setOnClickListener {
             val clipBoard =
                 requireContext().getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
             val clip = ClipData.newPlainText(getString(R.string.build), BuildConfig.GIT_HASH)

+ 22 - 7
src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/EmulationFragment.kt

@@ -38,6 +38,7 @@ 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.collect
 import kotlinx.coroutines.flow.collectLatest
 import kotlinx.coroutines.launch
 import org.yuzu.yuzu_emu.HomeNavigationDirections
@@ -184,10 +185,13 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
 
             override fun onDrawerOpened(drawerView: View) {
                 binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
+                binding.inGameMenu.requestFocus()
+                emulationViewModel.setDrawerOpen(true)
             }
 
             override fun onDrawerClosed(drawerView: View) {
                 binding.drawerLayout.setDrawerLockMode(IntSetting.LOCK_DRAWER.getInt())
+                emulationViewModel.setDrawerOpen(false)
             }
 
             override fun onDrawerStateChanged(newState: Int) {
@@ -239,6 +243,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                             requireContext().theme
                         )
                     }
+                    binding.inGameMenu.requestFocus()
                     true
                 }
 
@@ -247,6 +252,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                         null,
                         Settings.MenuTag.SECTION_ROOT
                     )
+                    binding.inGameMenu.requestFocus()
                     binding.root.findNavController().navigate(action)
                     true
                 }
@@ -256,6 +262,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                         args.game,
                         Settings.MenuTag.SECTION_ROOT
                     )
+                    binding.inGameMenu.requestFocus()
                     binding.root.findNavController().navigate(action)
                     true
                 }
@@ -287,6 +294,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                             )
                         }
                     }
+                    binding.inGameMenu.requestFocus()
                     NativeConfig.saveGlobalConfig()
                     true
                 }
@@ -295,7 +303,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                     emulationState.stop()
                     emulationViewModel.setIsEmulationStopping(true)
                     binding.drawerLayout.close()
-                    binding.drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
+                    binding.inGameMenu.requestFocus()
                     true
                 }
 
@@ -312,12 +320,7 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                     if (!NativeLibrary.isRunning()) {
                         return
                     }
-
-                    if (binding.drawerLayout.isOpen) {
-                        binding.drawerLayout.close()
-                    } else {
-                        binding.drawerLayout.open()
-                    }
+                    emulationViewModel.setDrawerOpen(!binding.drawerLayout.isOpen)
                 }
             }
         )
@@ -408,6 +411,18 @@ class EmulationFragment : Fragment(), SurfaceHolder.Callback {
                     }
                 }
             }
+            launch {
+                repeatOnLifecycle(Lifecycle.State.CREATED) {
+                    emulationViewModel.drawerOpen.collect {
+                        if (it) {
+                            binding.drawerLayout.open()
+                            binding.inGameMenu.requestFocus()
+                        } else {
+                            binding.drawerLayout.close()
+                        }
+                    }
+                }
+            }
         }
     }
 

+ 8 - 0
src/android/app/src/main/java/org/yuzu/yuzu_emu/model/EmulationViewModel.kt

@@ -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 EmulationViewModel : ViewModel() {
     val emulationStarted: StateFlow<Boolean> get() = _emulationStarted
@@ -23,6 +24,9 @@ class EmulationViewModel : ViewModel() {
     val shaderMessage: StateFlow<String> get() = _shaderMessage
     private val _shaderMessage = MutableStateFlow("")
 
+    private val _drawerOpen = MutableStateFlow(false)
+    val drawerOpen = _drawerOpen.asStateFlow()
+
     fun setEmulationStarted(started: Boolean) {
         _emulationStarted.value = started
     }
@@ -49,6 +53,10 @@ class EmulationViewModel : ViewModel() {
         setTotalShaders(max)
     }
 
+    fun setDrawerOpen(value: Boolean) {
+        _drawerOpen.value = value
+    }
+
     fun clear() {
         setEmulationStarted(false)
         setIsEmulationStopping(false)

+ 4 - 1
src/android/app/src/main/res/layout-w600dp/fragment_about.xml

@@ -11,12 +11,14 @@
         android:id="@+id/appbar_about"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_about"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:navigationIcon="@drawable/ic_back"
             app:title="@string/about" />
 
@@ -28,6 +30,7 @@
         android:layout_height="match_parent"
         android:fadeScrollbars="false"
         android:scrollbars="vertical"
+        android:defaultFocusHighlightEnabled="false"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <LinearLayout

+ 155 - 0
src/android/app/src/main/res/layout-w600dp/fragment_game_info.xml

@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/coordinator_about"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="?attr/colorSurface">
+
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/appbar_info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
+
+        <com.google.android.material.appbar.MaterialToolbar
+            android:id="@+id/toolbar_info"
+            android:layout_width="match_parent"
+            android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
+            app:navigationIcon="@drawable/ic_back" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <androidx.core.widget.NestedScrollView
+        android:id="@+id/scroll_info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:defaultFocusHighlightEnabled="false"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+        <LinearLayout
+            android:id="@+id/content_info"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:paddingHorizontal="16dp"
+            android:baselineAligned="false">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical"
+                android:layout_weight="3"
+                android:gravity="top|center_horizontal"
+                android:paddingHorizontal="16dp">
+
+                <com.google.android.material.button.MaterialButton
+                    android:id="@+id/button_copy"
+                    style="@style/Widget.Material3.Button"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="16dp"
+                    android:text="@string/copy_details" />
+
+                <com.google.android.material.button.MaterialButton
+                    android:id="@+id/button_verify_integrity"
+                    style="@style/Widget.Material3.Button"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="10dp"
+                    android:text="@string/verify_integrity" />
+
+            </LinearLayout>
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:orientation="vertical"
+                android:layout_weight="1">
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/path"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingTop="16dp">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/path_field"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:editable="false"
+                        android:importantForAutofill="no"
+                        android:inputType="none"
+                        android:minHeight="48dp"
+                        android:textAlignment="viewStart"
+                        tools:text="1.0.0" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/program_id"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingTop="16dp">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/program_id_field"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:editable="false"
+                        android:importantForAutofill="no"
+                        android:inputType="none"
+                        android:minHeight="48dp"
+                        android:textAlignment="viewStart"
+                        tools:text="1.0.0" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/developer"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingTop="16dp">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/developer_field"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:editable="false"
+                        android:importantForAutofill="no"
+                        android:inputType="none"
+                        android:minHeight="48dp"
+                        android:textAlignment="viewStart"
+                        tools:text="1.0.0" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+                <com.google.android.material.textfield.TextInputLayout
+                    android:id="@+id/version"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:paddingTop="16dp">
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/version_field"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:editable="false"
+                        android:importantForAutofill="no"
+                        android:inputType="none"
+                        android:minHeight="48dp"
+                        android:textAlignment="viewStart"
+                        tools:text="1.0.0" />
+
+                </com.google.android.material.textfield.TextInputLayout>
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+    </androidx.core.widget.NestedScrollView>
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 1 - 0
src/android/app/src/main/res/layout-w600dp/fragment_game_properties.xml

@@ -14,6 +14,7 @@
         android:clipToPadding="false"
         android:fadeScrollbars="false"
         android:scrollbars="vertical"
+        android:defaultFocusHighlightEnabled="false"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@+id/icon_layout"
         app:layout_constraintTop_toTopOf="parent">

+ 1 - 0
src/android/app/src/main/res/layout/card_driver_option.xml

@@ -23,6 +23,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical"
+            android:focusable="false"
             android:clickable="false"
             android:checked="false" />
 

+ 2 - 4
src/android/app/src/main/res/layout/card_folder.xml

@@ -6,16 +6,14 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_marginHorizontal="16dp"
-    android:layout_marginVertical="12dp"
-    android:focusable="true">
+    android:layout_marginVertical="12dp">
 
     <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
         android:padding="16dp"
-        android:layout_gravity="center_vertical"
-        android:animateLayoutChanges="true">
+        android:layout_gravity="center_vertical">
 
         <com.google.android.material.textview.MaterialTextView
             android:id="@+id/path"

+ 4 - 1
src/android/app/src/main/res/layout/fragment_about.xml

@@ -11,12 +11,14 @@
         android:id="@+id/appbar_about"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_about"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:title="@string/about"
             app:navigationIcon="@drawable/ic_back" />
 
@@ -28,6 +30,7 @@
         android:layout_height="match_parent"
         android:scrollbars="vertical"
         android:fadeScrollbars="false"
+        android:defaultFocusHighlightEnabled="false"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <LinearLayout

+ 4 - 0
src/android/app/src/main/res/layout/fragment_addons.xml

@@ -11,6 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent">
@@ -19,6 +20,7 @@
             android:id="@+id/toolbar_addons"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:navigationIcon="@drawable/ic_back" />
 
     </com.google.android.material.appbar.AppBarLayout>
@@ -28,6 +30,8 @@
         android:layout_width="match_parent"
         android:layout_height="0dp"
         android:clipToPadding="false"
+        android:defaultFocusHighlightEnabled="false"
+        android:nextFocusDown="@id/button_install"
         app:layout_behavior="@string/appbar_scrolling_view_behavior"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"

+ 3 - 1
src/android/app/src/main/res/layout/fragment_applet_launcher.xml

@@ -10,12 +10,14 @@
         android:id="@+id/appbar_applets"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_applets"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:navigationIcon="@drawable/ic_back"
             app:title="@string/applets" />
 

+ 2 - 0
src/android/app/src/main/res/layout/fragment_driver_manager.xml

@@ -15,12 +15,14 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:fitsSystemWindows="true"
+            android:touchscreenBlocksFocus="false"
             app:liftOnScrollTargetViewId="@id/list_drivers">
 
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/toolbar_drivers"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
+                android:touchscreenBlocksFocus="false"
                 app:navigationIcon="@drawable/ic_back"
                 app:title="@string/gpu_driver_manager" />
 

+ 4 - 1
src/android/app/src/main/res/layout/fragment_early_access.xml

@@ -11,12 +11,14 @@
         android:id="@+id/appbar_ea"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_about"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:navigationIcon="@drawable/ic_back"
             app:title="@string/early_access" />
 
@@ -30,6 +32,7 @@
         android:paddingBottom="20dp"
         android:scrollbars="vertical"
         android:fadeScrollbars="false"
+        android:defaultFocusHighlightEnabled="false"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <LinearLayout

+ 6 - 2
src/android/app/src/main/res/layout/fragment_emulation.xml

@@ -5,6 +5,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:keepScreenOn="true"
+    android:defaultFocusHighlightEnabled="false"
     tools:context="org.yuzu.yuzu_emu.fragments.EmulationFragment"
     tools:openDrawer="start">
 
@@ -24,7 +25,8 @@
                 android:layout_height="match_parent"
                 android:layout_gravity="center"
                 android:focusable="false"
-                android:focusableInTouchMode="false" />
+                android:focusableInTouchMode="false"
+                android:defaultFocusHighlightEnabled="false" />
 
             <com.google.android.material.card.MaterialCardView
                 android:id="@+id/loading_indicator"
@@ -32,7 +34,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center"
-                android:focusable="false"
+                android:defaultFocusHighlightEnabled="false"
                 android:clickable="false">
 
                 <androidx.constraintlayout.widget.ConstraintLayout
@@ -118,6 +120,7 @@
                 android:layout_gravity="center"
                 android:focusable="true"
                 android:focusableInTouchMode="true"
+                android:defaultFocusHighlightEnabled="false"
                 android:visibility="invisible" />
 
             <Button
@@ -160,6 +163,7 @@
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
         android:layout_gravity="start"
+        android:focusedByDefault="true"
         app:headerLayout="@layout/header_in_game"
         app:menu="@menu/menu_in_game"
         tools:visibility="gone" />

+ 3 - 0
src/android/app/src/main/res/layout/fragment_folders.xml

@@ -15,12 +15,14 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:fitsSystemWindows="true"
+            android:touchscreenBlocksFocus="false"
             app:liftOnScrollTargetViewId="@id/list_folders">
 
             <com.google.android.material.appbar.MaterialToolbar
                 android:id="@+id/toolbar_folders"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
+                android:touchscreenBlocksFocus="false"
                 app:navigationIcon="@drawable/ic_back"
                 app:title="@string/game_folders" />
 
@@ -31,6 +33,7 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:clipToPadding="false"
+            android:defaultFocusHighlightEnabled="false"
             app:layout_behavior="@string/appbar_scrolling_view_behavior" />
 
     </androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 3 - 0
src/android/app/src/main/res/layout/fragment_game_info.xml

@@ -11,12 +11,14 @@
         android:id="@+id/appbar_info"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:touchscreenBlocksFocus="false"
         android:fitsSystemWindows="true">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_info"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:navigationIcon="@drawable/ic_back" />
 
     </com.google.android.material.appbar.AppBarLayout>
@@ -25,6 +27,7 @@
         android:id="@+id/scroll_info"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:defaultFocusHighlightEnabled="false"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <LinearLayout

+ 3 - 2
src/android/app/src/main/res/layout/fragment_game_properties.xml

@@ -12,7 +12,8 @@
         android:layout_height="match_parent"
         android:scrollbars="vertical"
         android:fadeScrollbars="false"
-        android:clipToPadding="false">
+        android:clipToPadding="false"
+        android:defaultFocusHighlightEnabled="false">
 
         <LinearLayout
             android:id="@+id/layout_all"
@@ -86,7 +87,7 @@
                 android:id="@+id/list_properties"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                tools:listitem="@layout/card_simple_outlined" />
+                android:defaultFocusHighlightEnabled="false" />
 
         </LinearLayout>
 

+ 1 - 0
src/android/app/src/main/res/layout/fragment_games.xml

@@ -27,6 +27,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:clipToPadding="false"
+            android:defaultFocusHighlightEnabled="false"
             tools:listitem="@layout/card_game" />
 
     </RelativeLayout>

+ 2 - 1
src/android/app/src/main/res/layout/fragment_home_settings.xml

@@ -7,7 +7,8 @@
     android:background="?attr/colorSurface"
     android:scrollbars="vertical"
     android:fadeScrollbars="false"
-    android:clipToPadding="false">
+    android:clipToPadding="false"
+    android:defaultFocusHighlightEnabled="false">
 
     <androidx.appcompat.widget.LinearLayoutCompat
         android:id="@+id/linear_layout_settings"

+ 3 - 1
src/android/app/src/main/res/layout/fragment_installables.xml

@@ -10,12 +10,14 @@
         android:id="@+id/appbar_installables"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_installables"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:title="@string/manage_yuzu_data"
             app:navigationIcon="@drawable/ic_back" />
 

+ 3 - 1
src/android/app/src/main/res/layout/fragment_licenses.xml

@@ -10,12 +10,14 @@
         android:id="@+id/appbar_licenses"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:fitsSystemWindows="true">
+        android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false">
 
         <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/toolbar_licenses"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
+            android:touchscreenBlocksFocus="false"
             app:title="@string/licenses"
             app:navigationIcon="@drawable/ic_back" />
 

+ 2 - 0
src/android/app/src/main/res/layout/fragment_settings.xml

@@ -11,6 +11,7 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:fitsSystemWindows="true"
+        android:touchscreenBlocksFocus="false"
         app:elevation="0dp">
 
         <com.google.android.material.appbar.CollapsingToolbarLayout
@@ -24,6 +25,7 @@
                 android:id="@+id/toolbar_settings"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
+                android:touchscreenBlocksFocus="false"
                 app:layout_collapseMode="pin"
                 app:navigationIcon="@drawable/ic_back" />
 

+ 1 - 1
src/android/app/src/main/res/layout/list_item_addon.xml

@@ -6,7 +6,7 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:background="?attr/selectableItemBackground"
-    android:focusable="true"
+    android:focusable="false"
     android:paddingHorizontal="20dp"
     android:paddingVertical="16dp">
 

+ 1 - 0
src/android/app/src/main/res/layout/list_item_settings_header.xml

@@ -12,4 +12,5 @@
     android:textAlignment="viewStart"
     android:textColor="?attr/colorPrimary"
     android:textStyle="bold"
+    android:focusable="false"
     tools:text="CPU Settings" />