diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt index e34031033..e727a1c99 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/channel/calls/DeviceHandler.kt @@ -4,6 +4,7 @@ import android.app.LocaleConfig import android.app.LocaleManager import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.content.res.Resources import android.location.Geocoder import android.os.Build @@ -61,10 +62,17 @@ class DeviceHandler(private val context: Context) : MethodCallHandler { "isDynamicColorAvailable" to DynamicColors.isDynamicColorAvailable(), "showPinShortcutFeedback" to (sdkInt >= Build.VERSION_CODES.O), "supportEdgeToEdgeUIMode" to (sdkInt >= Build.VERSION_CODES.Q), + "supportPictureInPicture" to supportPictureInPicture(), ) ) } + private fun supportPictureInPicture(): Boolean { + // minimum version for `PictureInPictureParams.Builder#setAutoEnterEnabled` + val supportPipOnLeave = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S + return supportPipOnLeave && context.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) + } + private fun getLocales(@Suppress("unused_parameter") call: MethodCall, result: MethodChannel.Result) { fun toMap(locale: Locale): FieldMap = hashMapOf( "language" to locale.language, diff --git a/lib/model/device.dart b/lib/model/device.dart index f14e57eb9..85607bbec 100644 --- a/lib/model/device.dart +++ b/lib/model/device.dart @@ -1,7 +1,5 @@ import 'package:aves/services/common/services.dart'; import 'package:device_info_plus/device_info_plus.dart'; -import 'package:floating/floating.dart'; -import 'package:flutter/services.dart'; import 'package:local_auth/local_auth.dart'; import 'package:package_info_plus/package_info_plus.dart'; @@ -57,13 +55,6 @@ class Device { final auth = LocalAuthentication(); _canAuthenticateUser = await auth.canCheckBiometrics || await auth.isDeviceSupported(); - try { - _supportPictureInPicture = await Floating().isPipAvailable; - } on PlatformException catch (_) { - // as of floating v2.0.0, plugin assumes activity and fails when bound via service - _supportPictureInPicture = false; - } - final capabilities = await deviceService.getCapabilities(); _canPinShortcut = capabilities['canPinShortcut'] ?? false; _canRenderFlagEmojis = capabilities['canRenderFlagEmojis'] ?? false; @@ -74,5 +65,6 @@ class Device { _isDynamicColorAvailable = capabilities['isDynamicColorAvailable'] ?? false; _showPinShortcutFeedback = capabilities['showPinShortcutFeedback'] ?? false; _supportEdgeToEdgeUIMode = capabilities['supportEdgeToEdgeUIMode'] ?? false; + _supportPictureInPicture = capabilities['supportPictureInPicture'] ?? false; } }