From 58a12a89a9b052abb1e8d28512f9894bf7a5b6c7 Mon Sep 17 00:00:00 2001 From: mykh-hailo Date: Sat, 28 Mar 2026 07:40:19 -0300 Subject: [PATCH] feat: use androidx.browser for AuthenticatorActivity Signed-off-by: mykh-hailo --- app/build.gradle.kts | 1 + app/src/main/AndroidManifest.xml | 3 ++ .../authentication/AuthenticatorActivity.java | 34 +++++++++++++++---- gradle/libs.versions.toml | 2 ++ gradle/verification-metadata.xml | 1 + 5 files changed, 34 insertions(+), 7 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5e96105fa02c..f58265b10c8d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -374,6 +374,7 @@ dependencies { // region UI implementation(libs.bundles.ui) + implementation(libs.browser) // endregion // region Worker diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7be81f621b06..e275bf393cb7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -76,6 +76,9 @@ + + + diff --git a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index 3add5f5eef73..9addd870d4ac 100644 --- a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -128,6 +128,9 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.ActionBar; +import androidx.browser.customtabs.CustomTabColorSchemeParams; +import androidx.browser.customtabs.CustomTabsIntent; +import androidx.core.content.ContextCompat; import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; @@ -492,20 +495,37 @@ private void launchDefaultWebBrowser(String url) { return; } + Uri uri = Uri.parse(url); + try { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - PackageManager packageManager = getPackageManager(); + int toolbarColor = ContextCompat.getColor(this, R.color.primary); + CustomTabColorSchemeParams colorParams = new CustomTabColorSchemeParams.Builder() + .setToolbarColor(toolbarColor) + .build(); + CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder() + .setDefaultColorSchemeParams(colorParams) + .setColorScheme(CustomTabsIntent.COLOR_SCHEME_SYSTEM) + .setShowTitle(true) + .setShareState(CustomTabsIntent.SHARE_STATE_OFF) + .build(); + customTabsIntent.launchUrl(this, uri); + return; + } catch (Exception e) { + Log_OC.e(TAG, "Custom Tab login URL launch failed: " + e); + } + try { + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + PackageManager packageManager = getPackageManager(); if (intent.resolveActivity(packageManager) != null) { startActivity(intent); - } else { - DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_no_web_browser_found); + return; } } catch (Exception e) { - Log_OC.e(TAG, "Exception launchDefaultWebBrowser: " + e); - DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_login_error); + Log_OC.e(TAG, "External browser launch failed: " + e); } + + DisplayUtils.showSnackMessage(this, R.string.authenticator_activity_no_web_browser_found); } private Pair extractPollUrlAndToken() { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2e131b26b9b4..0874152a8c59 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,6 +13,7 @@ androidxTestVersion = "1.7.0" annotationVersion = "1.9.1" annotationsVersion = "3.0.1u2" appCompatVersion = "1.7.1" +browserVersion = "1.10.0" bcpkixJdk18onVersion = "1.83" cardviewVersion = "1.0.0" checker = "3.21.2" @@ -93,6 +94,7 @@ conscrypt-android = { module = "org.conscrypt:conscrypt-android", version.ref = bcpkix-jdk18on = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bcpkixJdk18onVersion" } # UI +browser = { module = "androidx.browser:browser", version.ref = "browserVersion" } appcompat = { module = "androidx.appcompat:appcompat", version.ref = "appCompatVersion" } cardview = { module = "androidx.cardview:cardview", version.ref = "cardviewVersion" } core-ktx = { module = "androidx.test:core-ktx", version.ref = "androidxTestVersion" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 452b3a0c8ae9..09ea90166cb0 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -49,6 +49,7 @@ +