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 @@
+