diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml
index 1c104f3bbf..ca61e077fb 100644
--- a/vector/src/main/AndroidManifest.xml
+++ b/vector/src/main/AndroidManifest.xml
@@ -308,7 +308,8 @@
+ android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
+ android:supportsPictureInPicture="true" />
diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
index 954f622801..dc756ec7d7 100644
--- a/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
+++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetActivity.kt
@@ -17,8 +17,11 @@
package im.vector.app.features.widgets
import android.app.Activity
+import android.app.PictureInPictureParams
import android.content.Context
import android.content.Intent
+import android.os.Build
+import android.util.Rational
import androidx.core.view.isVisible
import com.airbnb.mvrx.Mavericks
import com.airbnb.mvrx.viewModel
@@ -119,6 +122,24 @@ class WidgetActivity : VectorBaseActivity() {
}
}
+ override fun onUserLeaveHint() {
+ super.onUserLeaveHint()
+ val widgetArgs: WidgetArgs? = intent?.extras?.getParcelable(Mavericks.KEY_ARG)
+ if (widgetArgs?.kind == WidgetKind.ELEMENT_CALL) {
+ enterPictureInPicture()
+ }
+ }
+
+ private fun enterPictureInPicture() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val aspectRatio = Rational(resources.getDimensionPixelSize(R.dimen.call_pip_width), resources.getDimensionPixelSize(R.dimen.call_pip_height))
+ val params = PictureInPictureParams.Builder()
+ .setAspectRatio(aspectRatio)
+ .build()
+ enterPictureInPictureMode(params)
+ }
+ }
+
private fun handleClose(event: WidgetViewEvents.Close) {
if (event.content != null) {
val intent = createResultIntent(event.content)