From a72ee81ec6a3492cff6b6177ace2ccfdf7d46afc Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 23 Jun 2022 15:48:19 +0200 Subject: [PATCH] Prevent crash with PiP if asked aspect ratio is < 1/2.39 or > to 2.39 --- .../linphone/compatibility/Api26Compatibility.kt | 12 ++++++++---- .../linphone/compatibility/Api31Compatibility.kt | 8 ++++++-- .../org/linphone/compatibility/Compatibility.kt | 14 ++++++++++++-- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt index d76b521b0..7739e1c98 100644 --- a/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api26Compatibility.kt @@ -65,10 +65,14 @@ class Api26Compatibility { val params = PictureInPictureParams.Builder() .setAspectRatio(Compatibility.getPipRatio(activity, conference, !conference)) .build() - if (!activity.enterPictureInPictureMode(params)) { - Log.e("[Call] Failed to enter PiP mode") - } else { - Log.i("[Call] Entering PiP mode with ${if (conference) "portrait" else "landscape"} aspect ratio") + try { + if (!activity.enterPictureInPictureMode(params)) { + Log.e("[Call] Failed to enter PiP mode") + } else { + Log.i("[Call] Entering PiP mode with ${if (conference) "portrait" else "landscape"} aspect ratio") + } + } catch (e: Exception) { + Log.e("[Call] Can't build PiP params: $e") } } } diff --git a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt index 63dbee83a..d97b26341 100644 --- a/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api31Compatibility.kt @@ -215,8 +215,12 @@ class Api31Compatibility { .setAutoEnterEnabled(enable) .setAspectRatio(Compatibility.getPipRatio(activity, conference, !conference)) .build() - activity.setPictureInPictureParams(params) - Log.i("[Call] PiP auto enter enabled params set to $enable with ${if (conference) "portrait" else "landscape"} aspect ratio") + try { + activity.setPictureInPictureParams(params) + Log.i("[Call] PiP auto enter enabled params set to $enable with ${if (conference) "portrait" else "landscape"} aspect ratio") + } catch (e: Exception) { + Log.e("[Call] Can't build PiP params: $e") + } } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Compatibility.kt index 2aa2d0525..9c98a1dcc 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.kt @@ -287,8 +287,18 @@ class Compatibility { ): Rational { val displayMetrics = DisplayMetrics() activity.windowManager.defaultDisplay.getMetrics(displayMetrics) - val height = displayMetrics.heightPixels - val width = displayMetrics.widthPixels + var height = displayMetrics.heightPixels + var width = displayMetrics.widthPixels + + val aspectRatio = width / height + if (aspectRatio < 1 / 2.39) { + height = 2.39.toInt() + width = 1 + } else if (aspectRatio > 2.39) { + width = 2.39.toInt() + height = 1 + } + val ratio = if (width > height) { if (forcePortrait) { Rational(height, width)