Loading core/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ <!-- ICSx5 for Webcal feeds --> <package android:name="at.bitfire.icsdroid"/> <package android:name="foundation.e.browser" /> <!-- apps that interact with contact, calendar, task data (for debug info) --> <intent> Loading core/src/main/kotlin/at/bitfire/davdroid/di/AuthorizationServiceModule.kt +30 −5 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ package at.bitfire.davdroid.di import android.content.Context import android.content.pm.PackageManager import android.os.Build import at.bitfire.davdroid.ProductIds import dagger.Module import dagger.Provides Loading @@ -13,6 +15,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import net.openid.appauth.AppAuthConfiguration import net.openid.appauth.AuthorizationService import net.openid.appauth.browser.AnyBrowserMatcher import net.openid.appauth.browser.BrowserMatcher import java.net.HttpURLConnection import java.net.URL Loading @@ -22,7 +26,7 @@ import java.net.URL @Module @InstallIn(SingletonComponent::class) class AuthorizationServiceModule { val defaultBrowser = "foundation.e.browser" private val defaultBrowser = "foundation.e.browser" /** * Make sure to call [net.openid.appauth.AuthorizationService.dispose] when obtaining an instance. Loading @@ -38,9 +42,7 @@ class AuthorizationServiceModule { AuthorizationService( context, AppAuthConfiguration.Builder() .setBrowserMatcher { it.packageName == defaultBrowser } .setBrowserMatcher(getBrowserMatcher(context)) .setConnectionBuilder { uri -> val url = URL(uri.toString()) (url.openConnection() as HttpURLConnection).apply { Loading @@ -49,4 +51,27 @@ class AuthorizationServiceModule { }.build() ) private fun getBrowserMatcher(context: Context): BrowserMatcher = if (isInstalled(context, defaultBrowser)) { BrowserMatcher { browser -> browser.packageName == defaultBrowser } } else { AnyBrowserMatcher.INSTANCE } private fun isInstalled(context: Context, packageName: String): Boolean { return 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 } } } Loading
core/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -286,6 +286,7 @@ <!-- ICSx5 for Webcal feeds --> <package android:name="at.bitfire.icsdroid"/> <package android:name="foundation.e.browser" /> <!-- apps that interact with contact, calendar, task data (for debug info) --> <intent> Loading
core/src/main/kotlin/at/bitfire/davdroid/di/AuthorizationServiceModule.kt +30 −5 Original line number Diff line number Diff line Loading @@ -5,6 +5,8 @@ package at.bitfire.davdroid.di import android.content.Context import android.content.pm.PackageManager import android.os.Build import at.bitfire.davdroid.ProductIds import dagger.Module import dagger.Provides Loading @@ -13,6 +15,8 @@ import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent import net.openid.appauth.AppAuthConfiguration import net.openid.appauth.AuthorizationService import net.openid.appauth.browser.AnyBrowserMatcher import net.openid.appauth.browser.BrowserMatcher import java.net.HttpURLConnection import java.net.URL Loading @@ -22,7 +26,7 @@ import java.net.URL @Module @InstallIn(SingletonComponent::class) class AuthorizationServiceModule { val defaultBrowser = "foundation.e.browser" private val defaultBrowser = "foundation.e.browser" /** * Make sure to call [net.openid.appauth.AuthorizationService.dispose] when obtaining an instance. Loading @@ -38,9 +42,7 @@ class AuthorizationServiceModule { AuthorizationService( context, AppAuthConfiguration.Builder() .setBrowserMatcher { it.packageName == defaultBrowser } .setBrowserMatcher(getBrowserMatcher(context)) .setConnectionBuilder { uri -> val url = URL(uri.toString()) (url.openConnection() as HttpURLConnection).apply { Loading @@ -49,4 +51,27 @@ class AuthorizationServiceModule { }.build() ) private fun getBrowserMatcher(context: Context): BrowserMatcher = if (isInstalled(context, defaultBrowser)) { BrowserMatcher { browser -> browser.packageName == defaultBrowser } } else { AnyBrowserMatcher.INSTANCE } private fun isInstalled(context: Context, packageName: String): Boolean { return 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 } } }