catch ISE when entering PIP

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java | 22 ++
1 file changed, 17 insertions(+), 5 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/RtpSessionActivity.java 🔗

@@ -12,6 +12,7 @@ import android.os.Bundle;
 import android.os.PowerManager;
 import android.os.SystemClock;
 import android.support.annotation.NonNull;
+import android.support.annotation.RequiresApi;
 import android.support.annotation.StringRes;
 import android.util.Log;
 import android.util.Rational;
@@ -330,15 +331,26 @@ public class RtpSessionActivity extends XmppActivity implements XmppConnectionSe
     public void onUserLeaveHint() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && deviceSupportsPictureInPicture()) {
             if (shouldBePictureInPicture()) {
-                enterPictureInPictureMode(
-                        new PictureInPictureParams.Builder()
-                                .setAspectRatio(new Rational(10, 16))
-                                .build()
-                );
+                startPictureInPicture();
             }
         }
     }
 
+
+    @RequiresApi(api = Build.VERSION_CODES.O)
+    private void startPictureInPicture() {
+        try {
+            enterPictureInPictureMode(
+                    new PictureInPictureParams.Builder()
+                            .setAspectRatio(new Rational(10, 16))
+                            .build()
+            );
+        } catch (IllegalStateException e) {
+            //this sometimes happens on Samsung phones (possibly when Knox is enabled)
+            Log.w(Config.LOGTAG, "unable to enter picture in picture mode", e);
+        }
+    }
+
     private boolean deviceSupportsPictureInPicture() {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
             return getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE);