diff --git a/features/call/impl/build.gradle.kts b/features/call/impl/build.gradle.kts index b2d845a003..50c76b3b55 100644 --- a/features/call/impl/build.gradle.kts +++ b/features/call/impl/build.gradle.kts @@ -43,6 +43,7 @@ dependencies { implementation(projects.libraries.architecture) implementation(projects.libraries.core) implementation(projects.libraries.designsystem) + implementation(projects.libraries.featureflag.api) implementation(projects.libraries.matrix.impl) implementation(projects.libraries.matrixui) implementation(projects.libraries.network) diff --git a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt index 16dcb8d66c..6cf3f080ad 100644 --- a/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt +++ b/features/call/impl/src/main/kotlin/io/element/android/features/call/impl/pip/PipSupportProvider.kt @@ -24,6 +24,9 @@ import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.core.bool.orFalse import io.element.android.libraries.di.AppScope import io.element.android.libraries.di.ApplicationContext +import io.element.android.libraries.featureflag.api.FeatureFlagService +import io.element.android.libraries.featureflag.api.FeatureFlags +import kotlinx.coroutines.runBlocking import javax.inject.Inject interface PipSupportProvider { @@ -34,9 +37,15 @@ interface PipSupportProvider { @ContributesBinding(AppScope::class) class DefaultPipSupportProvider @Inject constructor( @ApplicationContext private val context: Context, + private val featureFlagService: FeatureFlagService, ) : PipSupportProvider { override fun isPipSupported(): Boolean { - val hasSystemFeaturePip = context.packageManager?.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE).orFalse() - return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && hasSystemFeaturePip + val isSupportedByTheOs = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && + context.packageManager?.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE).orFalse() + return if (isSupportedByTheOs) { + runBlocking { featureFlagService.isFeatureEnabled(FeatureFlags.PictureInPicture) } + } else { + false + } } } diff --git a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt index 17ea03f7a9..616a549e63 100644 --- a/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt +++ b/libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt @@ -113,4 +113,11 @@ enum class FeatureFlags( defaultValue = { true }, isFinished = false, ), + PictureInPicture( + key = "feature.pictureInPicture", + title = "Picture in Picture for Calls", + description = "Allow the Call to be rendered in PiP mode", + defaultValue = { it.buildType != BuildType.RELEASE }, + isFinished = false, + ), }