From b7943091044c010f0a2b0f7edd4566aa0019bdc4 Mon Sep 17 00:00:00 2001 From: Jamy Bailly Date: Wed, 6 May 2026 13:46:44 +0200 Subject: [PATCH] feat: Add extension to open customtab browser --- Common/build.gradle.kts | 1 + .../com/infomaniak/core/common/extensions/ContextExt.kt | 6 +++++- .../screencontent/PrivacyManagementHomeContent.kt | 6 ++++-- gradle/core.versions.toml | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Common/build.gradle.kts b/Common/build.gradle.kts index 7dca81e4d..56bed95b0 100644 --- a/Common/build.gradle.kts +++ b/Common/build.gradle.kts @@ -39,6 +39,7 @@ dependencies { api(core.splitties.coroutines) api(core.androidx.lifecycle.service) api(core.splitties.intents) + implementation(core.androidx.browser) implementation(core.androidx.collection) implementation(core.splitties.bitflags) implementation(core.splitties.toast) diff --git a/Common/src/main/kotlin/com/infomaniak/core/common/extensions/ContextExt.kt b/Common/src/main/kotlin/com/infomaniak/core/common/extensions/ContextExt.kt index 17f2169c1..be810a500 100644 --- a/Common/src/main/kotlin/com/infomaniak/core/common/extensions/ContextExt.kt +++ b/Common/src/main/kotlin/com/infomaniak/core/common/extensions/ContextExt.kt @@ -17,7 +17,6 @@ */ package com.infomaniak.core.common.extensions -import android.R.attr.duration import android.app.Activity import android.content.ActivityNotFoundException import android.content.Context @@ -28,6 +27,7 @@ import android.content.res.Configuration import android.provider.Settings import android.widget.Toast import androidx.annotation.StringRes +import androidx.browser.customtabs.CustomTabsIntent import androidx.core.content.ContextCompat import androidx.core.net.toUri import com.infomaniak.core.common.R @@ -50,6 +50,10 @@ fun Context.openUrl(url: String) { safeStartActivity(Intent(Intent.ACTION_VIEW, url.toUri()), R.string.browserNotFound) } +fun Context.openUrlInCustomTab(url: String) { + CustomTabsIntent.Builder().build().launchUrl(this, url.toUri()) +} + fun Context.safeStartActivity( intent: Intent, @StringRes title: Int = R.string.startActivityCantHandleAction, diff --git a/PrivacyManagement/src/main/kotlin/com/infomaniak/core/privacymanagement/screencontent/PrivacyManagementHomeContent.kt b/PrivacyManagement/src/main/kotlin/com/infomaniak/core/privacymanagement/screencontent/PrivacyManagementHomeContent.kt index f37bb0564..490de1a94 100644 --- a/PrivacyManagement/src/main/kotlin/com/infomaniak/core/privacymanagement/screencontent/PrivacyManagementHomeContent.kt +++ b/PrivacyManagement/src/main/kotlin/com/infomaniak/core/privacymanagement/screencontent/PrivacyManagementHomeContent.kt @@ -47,7 +47,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.infomaniak.core.common.extensions.openUrl +import com.infomaniak.core.common.extensions.openUrlInCustomTab import com.infomaniak.core.privacymanagement.theme.LocalPrivacyManagementTheme import com.infomaniak.core.privacymanagement.tracker.Tracker import com.infomaniak.core.ui.compose.margin.Margin @@ -96,7 +96,9 @@ private fun SourceButton(sourceUrl: String) { modifier = Modifier .fillMaxWidth() .heightIn(min = 48.dp), - onClick = { context.openUrl(sourceUrl) }, + onClick = { + context.openUrlInCustomTab(sourceUrl) + }, contentPadding = PaddingValues(horizontal = Margin.Medium), shape = RectangleShape, ) { diff --git a/gradle/core.versions.toml b/gradle/core.versions.toml index 390675476..0d456ef89 100644 --- a/gradle/core.versions.toml +++ b/gradle/core.versions.toml @@ -9,6 +9,7 @@ androidxCore = "1.16.0" # TODO: Update to 1.17.0 or later after we bump compileS appUpdateVersion = "2.1.0" appcompat = "1.7.1" biometricKtx = "1.2.0-alpha05" +browser = "1.10.0" coil = "3.3.0" coil2 = "2.7.0" # Coil2 is used in old Legacy modules only composeBom = "2025.12.00" @@ -66,6 +67,7 @@ android-login = { module = "com.github.infomaniak:android-login", version.ref = androidx-adaptive = { module = "androidx.compose.material3.adaptive:adaptive", version.ref = "adaptive" } androidx-adaptive-layout = { module = "androidx.compose.material3.adaptive:adaptive-layout", version.ref = "adaptive" } androidx-adaptive-navigation = { module = "androidx.compose.material3.adaptive:adaptive-navigation", version.ref = "adaptive" } +androidx-browser = { module = "androidx.browser:browser", version.ref = "browser" } androidx-collection = { module = "androidx.collection:collection", version.ref = "androidxCollection" } androidx-concurrent-futures-ktx = { module = "androidx.concurrent:concurrent-futures-ktx", version.ref = "concurrentFuturesKtx" } androidx-core = { module = "androidx.core:core", version.ref = "androidxCore" }