diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index b7ae56f9b4..2a0c4e4d1e 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt @@ -36,6 +36,9 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { USE_CUSTOM_RTC("custom_rtc_enabled"), BLACK_BACKGROUNDS("black_backgrounds"), + ENABLE_FOLDER_BUTTON("enable_folder_button"), + ENABLE_QLAUNCH_BUTTON("enable_qlaunch_button"), + ENABLE_UPDATE_CHECKS("enable_update_checks"), JOYSTICK_REL_CENTER("joystick_rel_center"), DPAD_SLIDE("dpad_slide"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index 8396672ba3..b4ff8332d4 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -794,6 +794,20 @@ abstract class SettingsItem( descriptionId = R.string.enable_update_checks_description, ) ) + put( + SwitchSetting( + BooleanSetting.ENABLE_FOLDER_BUTTON, + titleId = R.string.enable_folder_button, + descriptionId = R.string.enable_folder_button_description, + ) + ) + put( + SwitchSetting( + BooleanSetting.ENABLE_QLAUNCH_BUTTON, + titleId = R.string.enable_qlaunch_button, + descriptionId = R.string.enable_qlaunch_button_description, + ) + ) put( SingleChoiceSetting( IntSetting.APP_LANGUAGE, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index 27222c85af..d41b80a009 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1191,6 +1191,10 @@ class SettingsFragmentPresenter( descriptionId = R.string.use_black_backgrounds_description ) ) + + add(HeaderSetting(R.string.buttons)) + add(BooleanSetting.ENABLE_FOLDER_BUTTON.key) + add(BooleanSetting.ENABLE_QLAUNCH_BUTTON.key) } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt index 25d10f874a..cb5afb36c9 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/ui/GamesFragment.kt @@ -28,12 +28,13 @@ import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import org.yuzu.yuzu_emu.HomeNavigationDirections import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.YuzuApplication import org.yuzu.yuzu_emu.adapters.GameAdapter import org.yuzu.yuzu_emu.databinding.FragmentGamesBinding -import org.yuzu.yuzu_emu.HomeNavigationDirections +import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting import org.yuzu.yuzu_emu.model.AppletInfo import org.yuzu.yuzu_emu.model.Game import org.yuzu.yuzu_emu.model.GamesViewModel @@ -79,36 +80,6 @@ class GamesFragment : Fragment() { } } - private fun launchQLaunch() { - try { - val appletPath = NativeLibrary.getAppletLaunchPath(AppletInfo.QLaunch.entryId) - if (appletPath.isEmpty()) { - Toast.makeText( - requireContext(), - R.string.applets_error_applet, - Toast.LENGTH_SHORT - ).show() - return - } - - NativeLibrary.setCurrentAppletId(AppletInfo.QLaunch.appletId) - - val qlaunchGame = Game( - title = getString(R.string.qlaunch_applet), - path = appletPath - ) - - val action = HomeNavigationDirections.actionGlobalEmulationActivity(qlaunchGame) - findNavController().navigate(action) - } catch (e: Exception) { - Toast.makeText( - requireContext(), - "Failed to launch QLaunch: ${e.message}", - Toast.LENGTH_SHORT - ).show() - } - } - private fun getCurrentViewType(): Int { val isLandscape = resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE val key = if (isLandscape) CarouselRecyclerView.CAROUSEL_VIEW_TYPE_LANDSCAPE else CarouselRecyclerView.CAROUSEL_VIEW_TYPE_PORTRAIT @@ -207,6 +178,8 @@ class GamesFragment : Fragment() { setupTopView() + updateButtonsVisibility() + binding.addDirectory.setOnClickListener { getGamesDirectory.launch(Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).data) } @@ -483,6 +456,44 @@ class GamesFragment : Fragment() { } } + private fun launchQLaunch() { + try { + val appletPath = NativeLibrary.getAppletLaunchPath(AppletInfo.QLaunch.entryId) + if (appletPath.isEmpty()) { + Toast.makeText( + requireContext(), + R.string.applets_error_applet, + Toast.LENGTH_SHORT + ).show() + return + } + + NativeLibrary.setCurrentAppletId(AppletInfo.QLaunch.appletId) + + val qlaunchGame = Game( + title = getString(R.string.qlaunch_applet), + path = appletPath + ) + + val action = HomeNavigationDirections.actionGlobalEmulationActivity(qlaunchGame) + findNavController().navigate(action) + } catch (e: Exception) { + Toast.makeText( + requireContext(), + "Failed to launch QLaunch: ${e.message}", + Toast.LENGTH_SHORT + ).show() + } + } + + private fun updateButtonsVisibility() { + val showQLaunch = BooleanSetting.ENABLE_QLAUNCH_BUTTON.getBoolean() + val showFolder = BooleanSetting.ENABLE_FOLDER_BUTTON.getBoolean() + + binding.launchQlaunch.visibility = if (showQLaunch) View.VISIBLE else View.GONE + binding.addDirectory.visibility = if (showFolder) View.VISIBLE else View.GONE + } + private fun setInsets() = ViewCompat.setOnApplyWindowInsetsListener( binding.root diff --git a/src/android/app/src/main/jni/android_settings.h b/src/android/app/src/main/jni/android_settings.h index f8260e183a..09c53993dd 100644 --- a/src/android/app/src/main/jni/android_settings.h +++ b/src/android/app/src/main/jni/android_settings.h @@ -65,6 +65,10 @@ namespace AndroidSettings { Settings::Setting app_language{linkage, 0, "app_language", Settings::Category::Android}; Settings::Setting enable_update_checks{linkage, true, "enable_update_checks", Settings::Category::Android}; + Settings::Setting enable_folder_button{linkage, true, "enable_folder_button", + Settings::Category::Android}; + Settings::Setting enable_qlaunch_button{linkage, true, "enable_qlaunch_button", + Settings::Category::Android}; // Input/performance overlay settings std::vector overlay_control_data; diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index ec4f9a2cf4..816fafc4a4 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -1140,6 +1140,12 @@ Black backgrounds When using the dark theme, apply black backgrounds. + + Folder Button + Show the button to add game folders + QLaunch Button + Show the button to launch QLaunch + App Language Change the language of the app interface