fix Conscrypt initialization order

SSLSocketFactoryCompat relies on SSLContext.getInstance("TLS"), which is
called from componentApplication.inject(this) in NextcloudTalkApplication
.onCreate() - before Conscrypt is set as the provider.

This caused issues on Android 7.0 devices when connecting to Nextcloud's
push notification server. The result was a handshake error, because
Android 7.0's native implementation only supports TLSv1.2 and the
secp256r1 group, while the server supports only secp384r1.

Setting Conscrypt as a provider earlier ensures that the native
implementation is not used and the connection completes successfully.

Call stack:
<init>:44, SSLSocketFactoryCompat (com.nextcloud.talk.utils.ssl)
provideSslSocketFactoryCompat:156, RestModule (com.nextcloud.talk.dagger.modules)
provideSslSocketFactoryCompat:56, RestModule_ProvideSslSocketFactoryCompatFactory (com.nextcloud.talk.dagger.modules)
get:46, RestModule_ProvideSslSocketFactoryCompatFactory (com.nextcloud.talk.dagger.modules)
get:14, RestModule_ProvideSslSocketFactoryCompatFactory (com.nextcloud.talk.dagger.modules)
getSynchronized:54, DoubleCheck (dagger.internal)
get:45, DoubleCheck (dagger.internal)
get:69, RestModule_ProvideHttpClientFactory (com.nextcloud.talk.dagger.modules)
get:19, RestModule_ProvideHttpClientFactory (com.nextcloud.talk.dagger.modules)
getSynchronized:54, DoubleCheck (dagger.internal)
get:45, DoubleCheck (dagger.internal)
injectNextcloudTalkApplication:1393, DaggerNextcloudTalkApplicationComponent$NextcloudTalkApplicationComponentImpl (com.nextcloud.talk.application)
inject:867, DaggerNextcloudTalkApplicationComponent$NextcloudTalkApplicationComponentImpl (com.nextcloud.talk.application)
onCreate:145, NextcloudTalkApplication (com.nextcloud.talk.application)

Signed-off-by: Viktor Balogh <viktor.balogh45@gmail.com>
This commit is contained in:
Viktor Balogh 2025-04-19 21:14:41 +02:00 committed by Marcel Hibbe
parent d63f8d3fb4
commit f0bdae1417

View File

@ -142,14 +142,14 @@ class NextcloudTalkApplication : MultiDexApplication(), LifecycleObserver {
buildComponent() buildComponent()
DavUtils.registerCustomFactories() DavUtils.registerCustomFactories()
Security.insertProviderAt(Conscrypt.newProvider(), 1)
componentApplication.inject(this) componentApplication.inject(this)
Coil.setImageLoader(buildDefaultImageLoader()) Coil.setImageLoader(buildDefaultImageLoader())
setAppTheme(appPreferences.theme) setAppTheme(appPreferences.theme)
super.onCreate() super.onCreate()
Security.insertProviderAt(Conscrypt.newProvider(), 1)
ClosedInterfaceImpl().providerInstallerInstallIfNeededAsync() ClosedInterfaceImpl().providerInstallerInstallIfNeededAsync()
DeviceUtils.ignoreSpecialBatteryFeatures() DeviceUtils.ignoreSpecialBatteryFeatures()