Android: Expand bottom sheets on devices with touch too

In a few places in Dolphin, we're using BottomSheetDialogFragments.
These unhelpfully tend to start out in a "collapsed" state when in
landscape mode (presumably depending on factors like screen size). The
user then has to manually expand them before they can meaningfully
interact with them.

We've been automatically setting BottomSheetDialogFragments to the
expanded state if the device Dolphin is running on doesn't support
touch, since with d-pad navigation it's impossible to expand these
sheets. But I think we should set them to expanded on devices that
support touch too. I haven't encountered a single case where you can do
anything useful with any of Dolphin's BottomSheetDialogFragments while
they're collapsed, so the user always has to expand sheets manually if
they start out collapsed. And just because a device supports touch
doesn't necessarily mean you're interacting with it through the touch
screen right now - you could be using a gamepad, for instance.
This commit is contained in:
JosJuice committed 2025-10-30 21:22:41 +01:00
1 parent f8ebd27766
commit 1b8a54024c
5 files changed
+7 -21

No files matched your search

@@ -10,7 +10,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.google.android.material.divider.MaterialDividerItemDecoration import com.google.android.material.divider.MaterialDividerItemDecoration
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.DialogInputProfilesBinding import org.dolphinemu.dolphinemu.databinding.DialogInputProfilesBinding
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag
import org.dolphinemu.dolphinemu.utils.SerializableHelper.serializable import org.dolphinemu.dolphinemu.utils.SerializableHelper.serializable
@@ -45,11 +44,8 @@ class ProfileDialog : BottomSheetDialogFragment() {
divider.isLastItemDecorated = false divider.isLastItemDecorated = false
binding.profileList.addItemDecoration(divider) binding.profileList.addItemDecoration(divider)
// You can't expand a bottom sheet with a controller/remote/other non-touch devices BottomSheetBehavior.from<View>(view.parent as View).state =
val behavior: BottomSheetBehavior<View> = BottomSheetBehavior.from(view.parent as View) BottomSheetBehavior.STATE_EXPANDED
if (!resources.getBoolean(R.bool.hasTouch)) {
behavior.state = BottomSheetBehavior.STATE_EXPANDED
}
} }
override fun onDestroyView() { override fun onDestroyView() {
@@ -38,10 +38,8 @@ class AboutDialogFragment : BottomSheetDialogFragment() {
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
if (!resources.getBoolean(R.bool.hasTouch)) { BottomSheetBehavior.from<View>(view.parent as View).state =
BottomSheetBehavior.from<View>(view.parent as View).state = BottomSheetBehavior.STATE_EXPANDED
BottomSheetBehavior.STATE_EXPANDED
}
val wark = resources.getString(R.string.wark) val wark = resources.getString(R.string.wark)
val branch = String.format( val branch = String.format(
@@ -10,7 +10,6 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting
import android.widget.CompoundButton import android.widget.CompoundButton
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import org.dolphinemu.dolphinemu.R
import org.dolphinemu.dolphinemu.databinding.FragmentGridOptionsBinding import org.dolphinemu.dolphinemu.databinding.FragmentGridOptionsBinding
import org.dolphinemu.dolphinemu.databinding.FragmentGridOptionsTvBinding import org.dolphinemu.dolphinemu.databinding.FragmentGridOptionsTvBinding
import org.dolphinemu.dolphinemu.features.settings.model.NativeConfig import org.dolphinemu.dolphinemu.features.settings.model.NativeConfig
@@ -44,11 +43,9 @@ class GridOptionDialogFragment : BottomSheetDialogFragment() {
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// Pins fragment to the top of the dialog ensures the dialog is expanded in landscape by default // Ensure the dialog is expanded in landscape by default
if (!resources.getBoolean(R.bool.hasTouch)) { BottomSheetBehavior.from<View>(view.parent as View).state =
BottomSheetBehavior.from<View>(view.parent as View).state = BottomSheetBehavior.STATE_EXPANDED
BottomSheetBehavior.STATE_EXPANDED
}
if (activity is AppCompatActivity) { if (activity is AppCompatActivity) {
setUpCoverButtons() setUpCoverButtons()
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="hasTouch">false</bool>
</resources>
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<bool name="hasTouch">true</bool>
<bool name="enableDocumentProvider">false</bool> <bool name="enableDocumentProvider">false</bool>
</resources> </resources>