diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index be9978293c225f7313c9efe74254fb448d6f955e..be2a2ce0f616c4c85b7f509ded73485d6f9b6a27 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 40f23a5a35317e72cdf0e83223c04ce280a489ea..0ddf36488576b4323c6ed889ef0a5204f5c837c5 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 90c3aa7eceabf8915e67d2b0147e2639ef93a991..acfc052ec49f5c0af12e1b52f38eda0bd66c24b1 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
+ }
}