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