diff --git a/docs/Caveats.md b/docs/Caveats.md index d554f3ff77..39b5ab15e6 100644 --- a/docs/Caveats.md +++ b/docs/Caveats.md @@ -91,7 +91,7 @@ After configuration, you may need to modify `externals/ffmpeg/CMakeFiles/ffmpeg- `-lc++-experimental` doesn't exist in OpenBSD but the LLVM driver still tries to link against it, to solve just symlink `ln -s /usr/lib/libc++.a /usr/lib/libc++experimental.a`. Builds are currently not working due to lack of `std::jthread` and such, either compile libc++ manually or wait for ports to catch up. -If clang has errors, try using `g++11`. +If clang has errors, try using `g++-11`. ## FreeBSD @@ -107,8 +107,6 @@ hw.usb.usbhid.enable="0" ## NetBSD -2026-02-07: `vulkan-headers` must not be installed, since the version found in `pkgsrc` is older than required. Either wait for binary packages to update or build newer versions from source. - Install `pkgin` if not already `pkg_add pkgin`, see also the general [pkgsrc guide](https://www.netbsd.org/docs/pkgsrc/using.html). For NetBSD 10.1 provide `echo 'PKG_PATH="https://cdn.netbsd.org/pub/pkgsrc/packages/NetBSD/amd64/10.1/All/"' >/etc/pkg_install.conf`. If `pkgin` is taking too much time consider adding the following to `/etc/rc.conf`: ```sh @@ -118,7 +116,7 @@ ip6addrctl_policy=ipv4_prefer System provides a default `g++-10` which doesn't support the current C++ codebase; install `clang-19` with `pkgin install clang-19`. Or install `gcc14` (or `gcc15` with current pkgsrc). Provided that, the following CMake commands may work: -- `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -Bbuild` (Recommended) +- `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -Bbuild` - `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/pkg/gcc14/bin/gcc -DCMAKE_CXX_COMPILER=/usr/pkg/gcc14/bin/g++ -Bbuild` - `cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/pkg/gcc15/bin/gcc -DCMAKE_CXX_COMPILER=/usr/pkg/gcc15/bin/g++ -Bbuild` @@ -140,12 +138,8 @@ cmake --install build However, pkgsrc is highly recommended, see [getting pkgsrc](https://iso.us.netbsd.org/pub/pkgsrc/current/pkgsrc/doc/pkgsrc.html#getting). You must get `current` not the `2025Q2` version. -`QtCore` on NetBSD is included, but due to misconfigurations(!) we MUST include one of the standard headers that include `bits/c++config.h`, since source_location (required by `QtCore`) isn't properly configured to intake `bits/c++config.h` (none of the experimental library is). This is a bug with NetBSD packaging and not our fault, but alas. - ## DragonFlyBSD -2026-02-07: `vulkan-headers` and `vulkan-utility-libraries` must NOT be uninstalled, since they're too old: `1.3.289`. Either wait for binary packages to update or build newer versions from source. - If `libstdc++.so.6` is not found (`GLIBCXX_3.4.30`) then attempt: ```sh diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt index 5566423af6..a8ec82e560 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/adapters/GamePropertiesAdapter.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -10,8 +10,6 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.core.content.res.ResourcesCompat import androidx.lifecycle.LifecycleOwner -import com.google.android.material.button.MaterialButton -import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.databinding.CardInstallableIconBinding import org.yuzu.yuzu_emu.databinding.CardSimpleOutlinedBinding import org.yuzu.yuzu_emu.model.GameProperty @@ -91,33 +89,29 @@ class GamePropertiesAdapter( val hasVisibleActions = submenuProperty.secondaryActions?.any { it.isShown } == true - binding.layoutSecondaryActions.removeAllViews() - binding.dividerSecondaryActions.setVisible(false) if (hasVisibleActions) { + binding.dividerSecondaryActions.setVisible(true) binding.layoutSecondaryActions.setVisible(true) - val visibleActions = submenuProperty.secondaryActions!!.filter { it.isShown } - val inflater = LayoutInflater.from(binding.root.context) - visibleActions.forEachIndexed { index, secondaryAction -> - val button = inflater.inflate( - R.layout.item_secondary_action_button, - binding.layoutSecondaryActions, - false - ) as MaterialButton - button.setIconResource(secondaryAction.iconId) - button.text = "" - button.contentDescription = binding.root.context - .getString(secondaryAction.descriptionId) - button.tooltipText = binding.root.context - .getString(secondaryAction.descriptionId) - if (index == visibleActions.lastIndex) { - (button.layoutParams as ViewGroup.MarginLayoutParams).marginEnd = 0 + submenuProperty.secondaryActions!!.forEach { secondaryAction -> + if (secondaryAction.isShown) { + val button = com.google.android.material.button.MaterialButton( + binding.root.context, + null, + com.google.android.material.R.attr.materialButtonOutlinedStyle + ).apply { + setIconResource(secondaryAction.iconId) + iconSize = (18 * binding.root.context.resources.displayMetrics.density).toInt() + text = binding.root.context.getString(secondaryAction.descriptionId) + contentDescription = binding.root.context.getString(secondaryAction.descriptionId) + setOnClickListener { secondaryAction.action.invoke() } + } + binding.layoutSecondaryActions.addView(button) } - button.setOnClickListener { secondaryAction.action.invoke() } - binding.layoutSecondaryActions.addView(button) } } else { + binding.dividerSecondaryActions.setVisible(false) binding.layoutSecondaryActions.setVisible(false) } } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/dialogs/LobbyBrowser.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/dialogs/LobbyBrowser.kt index 6d5c6ef23f..57fd551e02 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/dialogs/LobbyBrowser.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/dialogs/LobbyBrowser.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.dialogs @@ -14,7 +14,6 @@ import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager -import android.widget.FrameLayout import androidx.core.content.getSystemService import androidx.core.widget.doOnTextChanged import androidx.recyclerview.widget.DividerItemDecoration @@ -59,30 +58,6 @@ class LobbyBrowser(context: Context) : BottomSheetDialog(context) { setupSearchBar() } - override fun onStart() { - super.onStart() - - window?.setLayout( - ViewGroup.LayoutParams.MATCH_PARENT, - ViewGroup.LayoutParams.MATCH_PARENT - ) - - val bottomSheet = - findViewById(com.google.android.material.R.id.design_bottom_sheet) - if (bottomSheet != null) { - bottomSheet.layoutParams = bottomSheet.layoutParams.apply { - width = ViewGroup.LayoutParams.MATCH_PARENT - height = ViewGroup.LayoutParams.MATCH_PARENT - } - bottomSheet.requestLayout() - } - - behavior.isFitToContents = false - behavior.expandedOffset = 0 - behavior.skipCollapsed = true - behavior.state = BottomSheetBehavior.STATE_EXPANDED - } - private fun setupRecyclerView() { adapter = LobbyRoomAdapter { room -> handleRoomSelection(room) } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt index 0f89533d8e..37a331b385 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/Settings.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.features.settings.model @@ -27,7 +27,7 @@ object Settings { SECTION_APP_SETTINGS(R.string.app_settings), SECTION_CUSTOM_PATHS(R.string.preferences_custom_paths), SECTION_DEBUG(R.string.preferences_debug), - SECTION_FREEDRENO(R.string.freedreno_settings_title), + SECTION_FREEDRENO(R.string.gpu_driver_settings), SECTION_APPLETS(R.string.applets_menu); } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt index 11be703536..dd932fcafb 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsActivity.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -111,18 +111,10 @@ class SettingsActivity : AppCompatActivity() { if (navHostFragment.childFragmentManager.backStackEntryCount > 0) { navHostFragment.navController.popBackStack() } else { - finishWithFragmentLikeAnimation() + finish() } } - private fun finishWithFragmentLikeAnimation() { - finish() - overridePendingTransition( - androidx.navigation.ui.R.anim.nav_default_pop_enter_anim, - androidx.navigation.ui.R.anim.nav_default_pop_exit_anim - ) - } - override fun onStart() { super.onStart() if (!DirectoryInitialization.areDirectoriesReady) { @@ -178,7 +170,7 @@ class SettingsActivity : AppCompatActivity() { getString(R.string.settings_reset), Toast.LENGTH_LONG ).show() - finishWithFragmentLikeAnimation() + finish() } private fun setInsets() { diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragment.kt index 667141725d..2f527b5f62 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragment.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: 2023 yuzu Emulator Project @@ -98,8 +98,23 @@ class SettingsFragment : Fragment() { activity ) - val toolbarTitle = resolveToolbarTitle() - configureToolbar(toolbarTitle) + binding.toolbarSettingsLayout.title = if (args.menuTag == Settings.MenuTag.SECTION_ROOT && + args.game != null + ) { + args.game!!.title + } else { + when (args.menuTag) { + Settings.MenuTag.SECTION_INPUT_PLAYER_ONE -> Settings.getPlayerString(1) + Settings.MenuTag.SECTION_INPUT_PLAYER_TWO -> Settings.getPlayerString(2) + Settings.MenuTag.SECTION_INPUT_PLAYER_THREE -> Settings.getPlayerString(3) + Settings.MenuTag.SECTION_INPUT_PLAYER_FOUR -> Settings.getPlayerString(4) + Settings.MenuTag.SECTION_INPUT_PLAYER_FIVE -> Settings.getPlayerString(5) + Settings.MenuTag.SECTION_INPUT_PLAYER_SIX -> Settings.getPlayerString(6) + Settings.MenuTag.SECTION_INPUT_PLAYER_SEVEN -> Settings.getPlayerString(7) + Settings.MenuTag.SECTION_INPUT_PLAYER_EIGHT -> Settings.getPlayerString(8) + else -> getString(args.menuTag.titleId) + } + } binding.listSettings.apply { adapter = settingsAdapter @@ -178,9 +193,11 @@ class SettingsFragment : Fragment() { } presenter.onViewCreated() + setInsets() } -private fun getPlayerIndex(): Int = + + private fun getPlayerIndex(): Int = when (args.menuTag) { Settings.MenuTag.SECTION_INPUT_PLAYER_ONE -> 0 Settings.MenuTag.SECTION_INPUT_PLAYER_TWO -> 1 @@ -193,27 +210,6 @@ private fun getPlayerIndex(): Int = else -> -1 } - private fun resolveToolbarTitle(): String { - if (args.menuTag == Settings.MenuTag.SECTION_ROOT && args.game != null) { - return args.game!!.title - } - return when (args.menuTag) { - Settings.MenuTag.SECTION_INPUT_PLAYER_ONE -> Settings.getPlayerString(1) - Settings.MenuTag.SECTION_INPUT_PLAYER_TWO -> Settings.getPlayerString(2) - Settings.MenuTag.SECTION_INPUT_PLAYER_THREE -> Settings.getPlayerString(3) - Settings.MenuTag.SECTION_INPUT_PLAYER_FOUR -> Settings.getPlayerString(4) - Settings.MenuTag.SECTION_INPUT_PLAYER_FIVE -> Settings.getPlayerString(5) - Settings.MenuTag.SECTION_INPUT_PLAYER_SIX -> Settings.getPlayerString(6) - Settings.MenuTag.SECTION_INPUT_PLAYER_SEVEN -> Settings.getPlayerString(7) - Settings.MenuTag.SECTION_INPUT_PLAYER_EIGHT -> Settings.getPlayerString(8) - else -> getString(args.menuTag.titleId) - } - } - - private fun configureToolbar(title: String) { - binding.toolbarSettings.title = title - } - private fun setInsets() { ViewCompat.setOnApplyWindowInsetsListener( binding.root 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 ff25584c92..77104e0614 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 @@ -6,6 +6,7 @@ package org.yuzu.yuzu_emu.features.settings.ui import android.annotation.SuppressLint import android.os.Build import android.widget.Toast +import androidx.preference.PreferenceManager import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.YuzuApplication @@ -26,9 +27,11 @@ import org.yuzu.yuzu_emu.features.settings.model.Settings.MenuTag import org.yuzu.yuzu_emu.features.settings.model.ShortSetting import org.yuzu.yuzu_emu.features.settings.model.StringSetting import org.yuzu.yuzu_emu.features.settings.model.view.* +import org.yuzu.yuzu_emu.utils.GpuDriverHelper import org.yuzu.yuzu_emu.utils.InputHandler import org.yuzu.yuzu_emu.utils.NativeConfig import org.yuzu.yuzu_emu.utils.DirectoryInitialization +import androidx.core.content.edit import androidx.fragment.app.FragmentActivity import org.yuzu.yuzu_emu.fragments.MessageDialogFragment @@ -180,6 +183,16 @@ class SettingsFragmentPresenter( menuKey = MenuTag.SECTION_DEBUG ) ) + if (GpuDriverHelper.isAdrenoGpu() && !NativeConfig.isPerGameConfigLoaded()) { + add( + SubmenuSetting( + titleId = R.string.gpu_driver_settings, + descriptionId = R.string.freedreno_settings_title, + iconId = R.drawable.ic_graphics, + menuKey = MenuTag.SECTION_FREEDRENO + ) + ) + } add( SubmenuSetting( titleId = R.string.applets_menu, @@ -1071,35 +1084,6 @@ class SettingsFragmentPresenter( add(HeaderSetting(R.string.theme_and_color)) - val themeMode: AbstractIntSetting = object : AbstractIntSetting { - override fun getInt(needsGlobal: Boolean): Int = IntSetting.THEME_MODE.getInt() - override fun setInt(value: Int) { - IntSetting.THEME_MODE.setInt(value) - settingsViewModel.setShouldRecreate(true) - } - - override val key: String = IntSetting.THEME_MODE.key - override val isRuntimeModifiable: Boolean = - IntSetting.THEME_MODE.isRuntimeModifiable - - override fun getValueAsString(needsGlobal: Boolean): String = - IntSetting.THEME_MODE.getValueAsString() - - override val defaultValue: Int = IntSetting.THEME_MODE.defaultValue - override fun reset() { - IntSetting.THEME_MODE.setInt(defaultValue) - settingsViewModel.setShouldRecreate(true) - } - } - - add( - SingleChoiceSetting( - themeMode, - titleId = R.string.change_theme_mode, - choicesId = R.array.themeModeEntries, - valuesId = R.array.themeModeValues - ) - ) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { add( @@ -1121,6 +1105,27 @@ class SettingsFragmentPresenter( ) } + val themeMode: AbstractIntSetting = object : AbstractIntSetting { + override fun getInt(needsGlobal: Boolean): Int = IntSetting.THEME_MODE.getInt() + override fun setInt(value: Int) { + IntSetting.THEME_MODE.setInt(value) + settingsViewModel.setShouldRecreate(true) + } + + override val key: String = IntSetting.THEME_MODE.key + override val isRuntimeModifiable: Boolean = + IntSetting.THEME_MODE.isRuntimeModifiable + + override fun getValueAsString(needsGlobal: Boolean): String = + IntSetting.THEME_MODE.getValueAsString() + + override val defaultValue: Int = IntSetting.THEME_MODE.defaultValue + override fun reset() { + IntSetting.THEME_MODE.setInt(defaultValue) + settingsViewModel.setShouldRecreate(true) + } + } + val staticThemeColor: AbstractIntSetting = object : AbstractIntSetting { override fun getInt(needsGlobal: Boolean): Int = IntSetting.STATIC_THEME_COLOR.getInt(needsGlobal) @@ -1144,6 +1149,15 @@ class SettingsFragmentPresenter( } } + add( + SingleChoiceSetting( + themeMode, + titleId = R.string.change_theme_mode, + choicesId = R.array.themeModeEntries, + valuesId = R.array.themeModeValues + ) + ) + if (IntSetting.THEME.getInt() != 1) { add( SingleChoiceSetting( diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt index 7fec413b66..9745970c5b 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/AboutFragment.kt @@ -1,4 +1,7 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + +// SPDX-FileCopyrightText: 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.fragments @@ -51,8 +54,8 @@ class AboutFragment : Fragment() { } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) homeViewModel.setStatusBarShadeVisibility(visible = false) + binding.toolbarAbout.setNavigationOnClickListener { binding.root.findNavController().popBackStack() } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverFetcherFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverFetcherFragment.kt index e2b652dc60..525fbd9f91 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverFetcherFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/DriverFetcherFragment.kt @@ -29,7 +29,6 @@ import org.yuzu.yuzu_emu.R import org.yuzu.yuzu_emu.databinding.FragmentDriverFetcherBinding import org.yuzu.yuzu_emu.features.fetcher.DriverGroupAdapter import org.yuzu.yuzu_emu.model.DriverViewModel -import org.yuzu.yuzu_emu.model.HomeViewModel import org.yuzu.yuzu_emu.utils.GpuDriverHelper import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins import java.io.IOException @@ -88,7 +87,6 @@ class DriverFetcherFragment : Fragment() { private lateinit var driverGroupAdapter: DriverGroupAdapter private val driverViewModel: DriverViewModel by activityViewModels() - private val homeViewModel: HomeViewModel by activityViewModels() private fun parseAdrenoModel(): Int { if (gpuModel == null) { @@ -140,7 +138,7 @@ class DriverFetcherFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - homeViewModel.setStatusBarShadeVisibility(visible = false) + binding.toolbarDrivers.setNavigationOnClickListener { binding.root.findNavController().popBackStack() } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/FreedrenoSettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/FreedrenoSettingsFragment.kt index 2eb77690ca..40111272d5 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/FreedrenoSettingsFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/FreedrenoSettingsFragment.kt @@ -22,7 +22,6 @@ import org.yuzu.yuzu_emu.databinding.FragmentFreedrenoSettingsBinding import org.yuzu.yuzu_emu.model.Game import org.yuzu.yuzu_emu.utils.NativeFreedrenoConfig import org.yuzu.yuzu_emu.utils.FreedrenoPresets -import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins class FreedrenoSettingsFragment : Fragment() { @@ -75,15 +74,10 @@ class FreedrenoSettingsFragment : Fragment() { binding.toolbarFreedreno.setNavigationOnClickListener { requireActivity().onBackPressedDispatcher.onBackPressed() } - - binding.toolbarFreedreno.title = getString( - if (isPerGameConfig) { - R.string.freedreno_per_game_title - } else { - R.string.freedreno_settings_title - } - ) - binding.toolbarFreedreno.subtitle = null + if (isPerGameConfig) { + binding.toolbarFreedreno.title = getString(R.string.freedreno_per_game_title) + binding.toolbarFreedreno.subtitle = game!!.title + } } private fun setupAdapters() { @@ -181,19 +175,17 @@ class FreedrenoSettingsFragment : Fragment() { private fun setupWindowInsets() { ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, insets -> - val barInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - val cutoutInsets = insets.getInsets(WindowInsetsCompat.Type.displayCutout()) - - val leftInsets = barInsets.left + cutoutInsets.left - val rightInsets = barInsets.right + cutoutInsets.right - - binding.appbarFreedreno.updateMargins(left = leftInsets, right = rightInsets) - binding.scrollFreedreno.updateMargins(left = leftInsets, right = rightInsets) - binding.scrollFreedreno.updatePadding(bottom = barInsets.bottom) + val systemInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + binding.root.updatePadding( + left = systemInsets.left, + right = systemInsets.right, + bottom = systemInsets.bottom + ) insets } } -private fun showSnackbar(message: String) { + + private fun showSnackbar(message: String) { Snackbar.make(binding.root, message, Snackbar.LENGTH_SHORT).show() } diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt index 9e55297846..97b0470feb 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/GamePropertiesFragment.kt @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later package org.yuzu.yuzu_emu.fragments @@ -310,21 +310,6 @@ class GamePropertiesFragment : Fragment() { ) ) - if (!args.game.isHomebrew) { - add( - SubmenuProperty( - R.string.add_ons, - R.string.add_ons_description, - R.drawable.ic_edit, - action = { - val action = GamePropertiesFragmentDirections - .actionPerGamePropertiesFragmentToAddonsFragment(args.game) - binding.root.findNavController().navigate(action) - } - ) - ) - } - if (GpuDriverHelper.supportsCustomDriverLoading()) { add( SubmenuProperty( @@ -356,6 +341,18 @@ class GamePropertiesFragment : Fragment() { } if (!args.game.isHomebrew) { + add( + SubmenuProperty( + R.string.add_ons, + R.string.add_ons_description, + R.drawable.ic_edit, + action = { + val action = GamePropertiesFragmentDirections + .actionPerGamePropertiesFragmentToAddonsFragment(args.game) + binding.root.findNavController().navigate(action) + } + ) + ) add( InstallableProperty( R.string.save_data, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt index 6f4bf858ea..918478bf85 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/fragments/HomeSettingsFragment.kt @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + package org.yuzu.yuzu_emu.fragments import android.Manifest @@ -41,9 +44,7 @@ import org.yuzu.yuzu_emu.model.HomeSetting import org.yuzu.yuzu_emu.model.HomeViewModel import org.yuzu.yuzu_emu.ui.main.MainActivity import org.yuzu.yuzu_emu.utils.FileUtil -import org.yuzu.yuzu_emu.utils.GpuDriverHelper import org.yuzu.yuzu_emu.utils.Log -import org.yuzu.yuzu_emu.utils.ViewUtils.updateMargins class HomeSettingsFragment : Fragment() { private var _binding: FragmentHomeSettingsBinding? = null @@ -70,12 +71,8 @@ class HomeSettingsFragment : Fragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - homeViewModel.setStatusBarShadeVisibility(visible = false) + homeViewModel.setStatusBarShadeVisibility(visible = true) mainActivity = requireActivity() as MainActivity - binding.toolbarHomeSettings.setNavigationOnClickListener { - findNavController().popBackStack() - } - binding.toolbarHomeSettings.title = getString(R.string.preferences_settings) val optionsList: MutableList = mutableListOf().apply { add( @@ -147,18 +144,6 @@ class HomeSettingsFragment : Fragment() { driverViewModel.selectedDriverTitle ) ) - if (GpuDriverHelper.isAdrenoGpu()) { - add( - HomeSetting( - R.string.freedreno_settings_title, - R.string.gpu_driver_settings, - R.drawable.ic_graphics, - { - binding.root.findNavController().navigate(R.id.freedrenoSettingsFragment) - } - ) - ) - } add( HomeSetting( R.string.multiplayer, @@ -480,22 +465,19 @@ class HomeSettingsFragment : Fragment() { } private fun setInsets() = - ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets -> + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, windowInsets -> val barInsets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()) val cutoutInsets = windowInsets.getInsets(WindowInsetsCompat.Type.displayCutout()) - binding.appbarHomeSettings.updateMargins( - left = barInsets.left + cutoutInsets.left, - right = barInsets.right + cutoutInsets.right - ) - binding.scrollViewSettings.updatePadding( - bottom = barInsets.bottom + top = barInsets.top ) binding.homeSettingsList.updatePadding( left = barInsets.left + cutoutInsets.left, - right = barInsets.right + cutoutInsets.right + top = cutoutInsets.top, + right = barInsets.right + cutoutInsets.right, + bottom = barInsets.bottom ) windowInsets diff --git a/src/android/app/src/main/res/drawable/item_release_box.xml b/src/android/app/src/main/res/drawable/item_release_box.xml index 0e692713a8..2f2ada1961 100644 --- a/src/android/app/src/main/res/drawable/item_release_box.xml +++ b/src/android/app/src/main/res/drawable/item_release_box.xml @@ -1,7 +1,7 @@ - + diff --git a/src/android/app/src/main/res/layout-land/dialog_lobby_browser.xml b/src/android/app/src/main/res/layout-land/dialog_lobby_browser.xml deleted file mode 100644 index 88d06d4873..0000000000 --- a/src/android/app/src/main/res/layout-land/dialog_lobby_browser.xml +++ /dev/null @@ -1,237 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/android/app/src/main/res/layout-land/dialog_multiplayer_connect.xml b/src/android/app/src/main/res/layout-land/dialog_multiplayer_connect.xml deleted file mode 100644 index 7a9064f9b9..0000000000 --- a/src/android/app/src/main/res/layout-land/dialog_multiplayer_connect.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/android/app/src/main/res/layout-land/fragment_games.xml b/src/android/app/src/main/res/layout-land/fragment_games.xml index 4d492c6c4b..da778eab69 100644 --- a/src/android/app/src/main/res/layout-land/fragment_games.xml +++ b/src/android/app/src/main/res/layout-land/fragment_games.xml @@ -44,12 +44,7 @@ style="@style/EdenCard" android:layout_width="match_parent" android:layout_height="48dp" - android:background="@android:color/transparent" app:cardCornerRadius="24dp" - app:cardBackgroundColor="@android:color/transparent" - app:cardElevation="0dp" - app:strokeColor="?attr/colorOutline" - app:strokeWidth="1dp" android:padding="4dp" > @@ -108,12 +103,7 @@ style="@style/EdenCard" android:layout_width="42dp" android:layout_height="42dp" - android:background="@android:color/transparent" app:cardCornerRadius="21dp" - app:cardBackgroundColor="@android:color/transparent" - app:cardElevation="0dp" - app:strokeColor="?attr/colorOutline" - app:strokeWidth="1dp" android:padding="8dp" > @@ -137,12 +127,7 @@ style="@style/EdenCard" android:layout_width="42dp" android:layout_height="42dp" - android:background="@android:color/transparent" app:cardCornerRadius="21dp" - app:cardBackgroundColor="@android:color/transparent" - app:cardElevation="0dp" - app:strokeColor="?attr/colorOutline" - app:strokeWidth="1dp" android:padding="8dp" > @@ -166,12 +151,7 @@ style="@style/EdenCard" android:layout_width="42dp" android:layout_height="42dp" - android:background="@android:color/transparent" app:cardCornerRadius="21dp" - app:cardBackgroundColor="@android:color/transparent" - app:cardElevation="0dp" - app:strokeColor="?attr/colorOutline" - app:strokeWidth="1dp" android:padding="8dp" > diff --git a/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml index 6fe4256c49..59ee1aad30 100644 --- a/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml +++ b/src/android/app/src/main/res/layout-w1000dp/card_installable_icon.xml @@ -12,83 +12,70 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" - android:orientation="vertical" + android:orientation="horizontal" + android:gravity="center_vertical" android:paddingHorizontal="24dp" android:paddingVertical="16dp"> + + + android:layout_marginEnd="16dp" + android:layout_weight="1" + android:orientation="vertical"> - - - + android:text="@string/user_data" + android:textAlignment="viewStart" /> - - - - - + - + android:layout_gravity="center_vertical" + android:contentDescription="@string/export" + android:tooltipText="@string/export" + android:visibility="gone" + app:icon="@drawable/ic_export" + tools:visibility="visible" /> -