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