From b03052843be337da1a1383252f73919967745ea4 Mon Sep 17 00:00:00 2001 From: Abandoned Cart Date: Fri, 2 Jun 2023 16:09:53 -0400 Subject: [PATCH] android: Add a picture in picture setting --- .../yuzu/yuzu_emu/activities/EmulationActivity.kt | 15 ++++++++++----- .../features/settings/model/BooleanSetting.kt | 2 ++ .../settings/ui/SettingsFragmentPresenter.kt | 9 +++++++++ src/android/app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 23 insertions(+), 5 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 7cbb5427ac..2f2b03a7d2 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 @@ -42,6 +42,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import org.yuzu.yuzu_emu.NativeLibrary import org.yuzu.yuzu_emu.R +import org.yuzu.yuzu_emu.features.settings.model.BooleanSetting import org.yuzu.yuzu_emu.features.settings.model.SettingsViewModel import org.yuzu.yuzu_emu.fragments.EmulationFragment import org.yuzu.yuzu_emu.model.Game @@ -99,9 +100,6 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { // Set these options now so that the SurfaceView the game renders into is the right size. enableFullscreenImmersive() - pictureInPictureParamsBuilder = getPictureInPictureBuilder() - setPictureInPictureParams(pictureInPictureParamsBuilder.build()) - setContentView(R.layout.activity_emulation) window.decorView.setBackgroundColor(getColor(android.R.color.black)) @@ -167,6 +165,11 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { EmulationMenuSettings.landscapeScreenLayout, getAdjustedRotation() ) + + if (BooleanSetting.PICTURE_IN_PICTURE.boolean) { + pictureInPictureParamsBuilder = getPictureInPictureBuilder() + setPictureInPictureParams(pictureInPictureParamsBuilder.build()) + } } override fun onPause() { @@ -176,8 +179,10 @@ class EmulationActivity : AppCompatActivity(), SensorEventListener { } override fun onUserLeaveHint() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S && !isInPictureInPictureMode) { - enterPictureInPictureMode(pictureInPictureParamsBuilder.build()) + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) { + if (BooleanSetting.PICTURE_IN_PICTURE.boolean && !isInPictureInPictureMode) { + enterPictureInPictureMode(pictureInPictureParamsBuilder.build()) + } } } 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 3dfd66779d..63b4df2733 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 @@ -8,6 +8,7 @@ enum class BooleanSetting( override val section: String, override val defaultValue: Boolean ) : AbstractBooleanSetting { + PICTURE_IN_PICTURE("picture_in_picture", Settings.SECTION_GENERAL, true), USE_CUSTOM_RTC("custom_rtc_enabled", Settings.SECTION_SYSTEM, false); override var boolean: Boolean = defaultValue @@ -27,6 +28,7 @@ enum class BooleanSetting( companion object { private val NOT_RUNTIME_EDITABLE = listOf( + PICTURE_IN_PICTURE, USE_CUSTOM_RTC ) 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 061046b2e7..157ae2bc11 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 @@ -166,6 +166,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView) IntSetting.CPU_ACCURACY.defaultValue ) ) + add( + SwitchSetting( + BooleanSetting.PICTURE_IN_PICTURE, + R.string.picture_in_picture, + R.string.picture_in_picture_description, + BooleanSetting.PICTURE_IN_PICTURE.key, + BooleanSetting.PICTURE_IN_PICTURE.defaultValue + ) + ) } } diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index f40e62c0d7..b51ee0db88 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -357,6 +357,8 @@ When using the dark theme, apply black backgrounds. + Picture in Picture + Minimize window when placed in the background Pause Play