From 0cc7ae5088e3fd74c58f7002cbe37d6841e0c25c Mon Sep 17 00:00:00 2001 From: Jonathan Klee Date: Fri, 24 Apr 2026 10:03:05 +0200 Subject: [PATCH] feat: remove strict dependency to e browser Remove dependency to e browser, but use it when it is present though. --- app/src/main/AndroidManifest.xml | 2 + .../kotlin/at/bitfire/davdroid/Constants.kt | 1 - .../bitfire/davdroid/network/OAuthModule.kt | 45 ++++++++++++++----- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be9978293..be2a2ce0f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -819,6 +819,8 @@ + + diff --git a/app/src/main/kotlin/at/bitfire/davdroid/Constants.kt b/app/src/main/kotlin/at/bitfire/davdroid/Constants.kt index 40f23a5a3..0ddf36488 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/Constants.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/Constants.kt @@ -35,5 +35,4 @@ object Constants { const val MURENA_DAV_URL = "https://murena.io/remote.php/dav" - const val E_BROWSER_PACKAGE_NAME = "foundation.e.browser" } diff --git a/app/src/main/kotlin/at/bitfire/davdroid/network/OAuthModule.kt b/app/src/main/kotlin/at/bitfire/davdroid/network/OAuthModule.kt index 90c3aa7ec..acfc052ec 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/network/OAuthModule.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/network/OAuthModule.kt @@ -5,7 +5,8 @@ package at.bitfire.davdroid.network import android.content.Context -import at.bitfire.davdroid.Constants +import android.content.pm.PackageManager +import android.os.Build import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -20,17 +21,37 @@ import java.net.URL @InstallIn(SingletonComponent::class) object OAuthModule { + private const val E_BROWSER_PACKAGE_NAME = "foundation.e.browser" + @Provides - fun authorizationService(@ApplicationContext context: Context): AuthorizationService = - AuthorizationService(context, - AppAuthConfiguration.Builder() - .setConnectionBuilder { uri -> - val url = URL(uri.toString()) - (url.openConnection() as HttpURLConnection).apply { - setRequestProperty("User-Agent", HttpClient.UserAgentInterceptor.userAgent) - } + fun authorizationService(@ApplicationContext context: Context): AuthorizationService { + val builder = AppAuthConfiguration.Builder() + .setConnectionBuilder { uri -> + val url = URL(uri.toString()) + (url.openConnection() as HttpURLConnection).apply { + setRequestProperty("User-Agent", HttpClient.UserAgentInterceptor.userAgent) } - .setBrowserMatcher { it.packageName == Constants.E_BROWSER_PACKAGE_NAME } - .build() - ) + } + + if (isInstalled(context, E_BROWSER_PACKAGE_NAME)) { + builder.setBrowserMatcher { browser -> + browser.packageName == E_BROWSER_PACKAGE_NAME + } + } + + return AuthorizationService(context, builder.build()) + } + + private fun isInstalled(context: Context, packageName: String): Boolean = + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.packageManager.getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0)) + } else { + @Suppress("DEPRECATION") + context.packageManager.getPackageInfo(packageName, 0) + } + true + } catch (_: PackageManager.NameNotFoundException) { + false + } } -- GitLab