forked from GitHub-Mirror/riotX-android
Dagger: continue adding it to SDK [WIP]
This commit is contained in:
parent
3d465f6fdf
commit
4be0ab87fc
@ -36,7 +36,7 @@ import javax.inject.Inject
|
||||
* non-production environment.
|
||||
*/
|
||||
@MatrixScope
|
||||
internal class CurlLoggingInterceptor @Inject constructor(private val logger: HttpLoggingInterceptor.Logger = HttpLoggingInterceptor.Logger.DEFAULT)
|
||||
internal class CurlLoggingInterceptor @Inject constructor(private val logger: HttpLoggingInterceptor.Logger)
|
||||
: Interceptor {
|
||||
|
||||
/**
|
||||
|
@ -0,0 +1,43 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal
|
||||
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import im.vector.matrix.android.internal.session.SessionComponent
|
||||
import javax.inject.Inject
|
||||
|
||||
@MatrixScope
|
||||
internal class SessionManager @Inject constructor() {
|
||||
|
||||
private val sessionComponents = HashMap<String, SessionComponent>()
|
||||
private val sessions = HashMap<String, Session>()
|
||||
|
||||
fun createSession(userId: String): Session? {
|
||||
if (sessionComponents.containsKey(userId)) {
|
||||
throw RuntimeException("You already have a session for the user $userId")
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun releaseSession(userId: String) {
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -17,27 +17,43 @@
|
||||
package im.vector.matrix.android.internal.auth
|
||||
|
||||
import android.content.Context
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.internal.auth.db.AuthRealmModule
|
||||
import im.vector.matrix.android.internal.auth.db.RealmSessionParamsStore
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.cache.ClearCacheTask
|
||||
import im.vector.matrix.android.internal.session.cache.RealmClearCacheTask
|
||||
import io.realm.RealmConfiguration
|
||||
import java.io.File
|
||||
import javax.inject.Named
|
||||
|
||||
@Module
|
||||
internal class AuthModule {
|
||||
internal abstract class AuthModule {
|
||||
|
||||
@Provides
|
||||
@MatrixScope
|
||||
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
||||
val old = File(context.filesDir, "matrix-sdk-auth")
|
||||
if (old.exists()) {
|
||||
old.renameTo(File(context.filesDir, "matrix-sdk-auth.realm"))
|
||||
@Module
|
||||
companion object {
|
||||
@Provides
|
||||
@MatrixScope
|
||||
@Named("AuthRealmConfiguration")
|
||||
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
||||
val old = File(context.filesDir, "matrix-sdk-auth")
|
||||
if (old.exists()) {
|
||||
old.renameTo(File(context.filesDir, "matrix-sdk-auth.realm"))
|
||||
}
|
||||
return RealmConfiguration.Builder()
|
||||
.name("matrix-sdk-auth.realm")
|
||||
.modules(AuthRealmModule())
|
||||
.deleteRealmIfMigrationNeeded()
|
||||
.build()
|
||||
}
|
||||
return RealmConfiguration.Builder()
|
||||
.name("matrix-sdk-auth.realm")
|
||||
.modules(AuthRealmModule())
|
||||
.deleteRealmIfMigrationNeeded()
|
||||
.build()
|
||||
}
|
||||
|
||||
@Binds
|
||||
@MatrixScope
|
||||
abstract fun bindSessionParamsStore(sessionParamsStore: RealmSessionParamsStore): SessionParamsStore
|
||||
|
||||
|
||||
}
|
||||
|
@ -24,12 +24,11 @@ import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.util.Cancelable
|
||||
import im.vector.matrix.android.internal.SessionManager
|
||||
import im.vector.matrix.android.internal.auth.data.PasswordLoginParams
|
||||
import im.vector.matrix.android.internal.auth.data.ThreePidMedium
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import im.vector.matrix.android.internal.network.executeRequest
|
||||
import im.vector.matrix.android.internal.session.DefaultSession
|
||||
import im.vector.matrix.android.internal.session.SessionFactory
|
||||
import im.vector.matrix.android.internal.util.CancelableCoroutine
|
||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
@ -37,13 +36,12 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import retrofit2.Retrofit
|
||||
import javax.inject.Inject
|
||||
import kotlin.random.Random
|
||||
|
||||
@MatrixScope
|
||||
internal class DefaultAuthenticator @Inject constructor(private val retrofitBuilder: Retrofit.Builder,
|
||||
private val coroutineDispatchers: MatrixCoroutineDispatchers,
|
||||
private val sessionParamsStore: SessionParamsStore,
|
||||
private val sessionFactory: DefaultSession.Factory
|
||||
private val sessionManager: SessionManager
|
||||
) : Authenticator {
|
||||
|
||||
override fun hasActiveSessions(): Boolean {
|
||||
@ -53,7 +51,7 @@ internal class DefaultAuthenticator @Inject constructor(private val retrofitBuil
|
||||
override fun getLastActiveSession(): Session? {
|
||||
val sessionParams = sessionParamsStore.get()
|
||||
return sessionParams?.let {
|
||||
sessionFactory.create(it)
|
||||
sessionManager.createSession(it.credentials.userId)
|
||||
}
|
||||
}
|
||||
|
||||
@ -87,7 +85,7 @@ internal class DefaultAuthenticator @Inject constructor(private val retrofitBuil
|
||||
sessionParamsStore.save(sessionParams)
|
||||
sessionParams
|
||||
}.map {
|
||||
sessionFactory.create(it)
|
||||
sessionManager.createSession(it.credentials.userId)!!
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,9 +23,11 @@ import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import io.realm.Realm
|
||||
import io.realm.RealmConfiguration
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Named
|
||||
|
||||
@MatrixScope
|
||||
internal class RealmSessionParamsStore @Inject constructor(private val mapper: SessionParamsMapper,
|
||||
@Named("AuthRealmConfiguration")
|
||||
private val realmConfiguration: RealmConfiguration) : SessionParamsStore {
|
||||
|
||||
override fun save(sessionParams: SessionParams): Try<SessionParams> {
|
||||
|
@ -17,11 +17,14 @@
|
||||
package im.vector.matrix.android.internal.auth.db
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||
import im.vector.matrix.android.api.auth.data.Credentials
|
||||
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
|
||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class SessionParamsMapper(moshi: Moshi) {
|
||||
@MatrixScope
|
||||
internal class SessionParamsMapper @Inject constructor(moshi: Moshi) {
|
||||
|
||||
private val credentialsAdapter = moshi.adapter(Credentials::class.java)
|
||||
private val homeServerConnectionConfigAdapter = moshi.adapter(HomeServerConnectionConfig::class.java)
|
||||
|
@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.session.SessionScope
|
||||
import io.realm.RealmConfiguration
|
||||
import retrofit2.Retrofit
|
||||
import java.io.File
|
||||
import javax.inject.Named
|
||||
|
||||
@Module
|
||||
internal class CryptoModule {
|
||||
@ -38,6 +39,7 @@ internal class CryptoModule {
|
||||
// Realm configuration, named to avoid clash with main cache realm configuration
|
||||
@Provides
|
||||
@SessionScope
|
||||
@Named("CryptonRealmConfiguration")
|
||||
fun providesRealmConfiguration(context: Context, credentials: Credentials): RealmConfiguration {
|
||||
return RealmConfiguration.Builder()
|
||||
.directory(File(context.filesDir, credentials.userId.hash()))
|
||||
@ -50,10 +52,11 @@ internal class CryptoModule {
|
||||
|
||||
@Provides
|
||||
@SessionScope
|
||||
fun providesCryptoStore(realmConfiguration: RealmConfiguration, credentials: Credentials): IMXCryptoStore {
|
||||
fun providesCryptoStore(@Named("CryptonRealmConfiguration")
|
||||
realmConfiguration: RealmConfiguration, credentials: Credentials): IMXCryptoStore {
|
||||
return RealmCryptoStore(false /* TODO*/,
|
||||
realmConfiguration,
|
||||
credentials)
|
||||
realmConfiguration,
|
||||
credentials)
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -1,27 +0,0 @@
|
||||
/*
|
||||
* Copyright 2019 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.di
|
||||
|
||||
import android.content.Context
|
||||
import androidx.work.ListenableWorker
|
||||
import androidx.work.WorkerParameters
|
||||
|
||||
interface ChildWorkerFactory {
|
||||
|
||||
fun create(appContext: Context, params: WorkerParameters): ListenableWorker
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.di
|
||||
|
||||
import com.squareup.inject.assisted.dagger2.AssistedModule
|
||||
import dagger.Module
|
||||
|
||||
@Module(includes = [AssistedInject_MatrixAssistedInjectModule::class])
|
||||
@AssistedModule
|
||||
internal interface MatrixAssistedInjectModule
|
@ -16,10 +16,32 @@
|
||||
|
||||
package im.vector.matrix.android.internal.di
|
||||
|
||||
import android.content.Context
|
||||
import com.squareup.moshi.Moshi
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import im.vector.matrix.android.internal.auth.AuthModule
|
||||
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
|
||||
import im.vector.matrix.android.internal.worker.WorkerBindingModule
|
||||
import retrofit2.Retrofit
|
||||
import java.net.Authenticator
|
||||
|
||||
@Component
|
||||
|
||||
@Component(modules = [MatrixModule::class, NetworkModule::class, AuthModule::class])
|
||||
@MatrixScope
|
||||
interface MatrixComponent {
|
||||
internal interface MatrixComponent {
|
||||
|
||||
fun matrixCoroutineDispatchers(): MatrixCoroutineDispatchers
|
||||
|
||||
fun moshi(): Moshi
|
||||
|
||||
fun retrofitBuilder(): Retrofit.Builder
|
||||
|
||||
fun authenticator(): Authenticator
|
||||
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
fun create(@BindsInstance context: Context): MatrixComponent
|
||||
}
|
||||
|
||||
}
|
@ -16,7 +16,6 @@
|
||||
|
||||
package im.vector.matrix.android.internal.di
|
||||
|
||||
import android.content.Context
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.internal.crypto.CryptoAsyncHelper
|
||||
@ -25,23 +24,17 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.android.asCoroutineDispatcher
|
||||
|
||||
@Module
|
||||
internal class MatrixModule(private val context: Context) {
|
||||
|
||||
@Provides
|
||||
@MatrixScope
|
||||
fun providesContext(): Context {
|
||||
return context
|
||||
}
|
||||
internal class MatrixModule {
|
||||
|
||||
@Provides
|
||||
@MatrixScope
|
||||
fun providesMatrixCoroutineDispatchers(): MatrixCoroutineDispatchers {
|
||||
val cryptoHandler = CryptoAsyncHelper.getDecryptBackgroundHandler()
|
||||
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
||||
computation = Dispatchers.IO,
|
||||
main = Dispatchers.Main,
|
||||
crypto = cryptoHandler.asCoroutineDispatcher("crypto")
|
||||
)
|
||||
}
|
||||
val cryptoHandler = CryptoAsyncHelper.getDecryptBackgroundHandler()
|
||||
return MatrixCoroutineDispatchers(io = Dispatchers.IO,
|
||||
computation = Dispatchers.IO,
|
||||
main = Dispatchers.Main,
|
||||
crypto = cryptoHandler.asCoroutineDispatcher("crypto")
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@ -42,7 +42,7 @@ import im.vector.matrix.android.internal.database.LiveEntityObserver
|
||||
import im.vector.matrix.android.internal.session.sync.job.SyncThread
|
||||
import timber.log.Timber
|
||||
|
||||
|
||||
@SessionScope
|
||||
internal class DefaultSession @AssistedInject constructor(@Assisted override val sessionParams: SessionParams,
|
||||
private val monarchy: Monarchy,
|
||||
private val liveEntityUpdaters: List<LiveEntityObserver>,
|
||||
|
@ -16,16 +16,46 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session
|
||||
|
||||
import dagger.BindsInstance
|
||||
import dagger.Component
|
||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||
import im.vector.matrix.android.internal.crypto.CryptoModule
|
||||
import im.vector.matrix.android.internal.di.MatrixAssistedInjectModule
|
||||
import im.vector.matrix.android.internal.di.MatrixComponent
|
||||
import im.vector.matrix.android.internal.session.content.ContentModule
|
||||
import im.vector.matrix.android.internal.session.cache.CacheModule
|
||||
import im.vector.matrix.android.internal.session.filter.FilterModule
|
||||
import im.vector.matrix.android.internal.session.group.GroupModule
|
||||
import im.vector.matrix.android.internal.session.room.RoomModule
|
||||
import im.vector.matrix.android.internal.session.signout.SignOutModule
|
||||
import im.vector.matrix.android.internal.session.sync.SyncModule
|
||||
import im.vector.matrix.android.internal.worker.WorkerBindingModule
|
||||
|
||||
@Component(dependencies = [MatrixComponent::class])
|
||||
@Component(dependencies = [MatrixComponent::class],
|
||||
modules = [
|
||||
SessionModule::class,
|
||||
RoomModule::class,
|
||||
SyncModule::class,
|
||||
SignOutModule::class,
|
||||
GroupModule::class,
|
||||
FilterModule::class,
|
||||
GroupModule::class,
|
||||
ContentModule::class,
|
||||
CacheModule::class,
|
||||
CryptoModule::class,
|
||||
MatrixAssistedInjectModule::class,
|
||||
WorkerBindingModule::class
|
||||
]
|
||||
)
|
||||
@SessionScope
|
||||
interface SessionComponent {
|
||||
internal interface SessionComponent {
|
||||
|
||||
@Component.Builder
|
||||
interface Builder {
|
||||
fun matrixComponent(matrixComponent: MatrixComponent): Builder
|
||||
@Component.Factory
|
||||
interface Factory {
|
||||
fun create(
|
||||
matrixComponent: MatrixComponent,
|
||||
@BindsInstance sessionParams: SessionParams): SessionComponent
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
/*
|
||||
* Copyright 2019 New Vector Ltd
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.session
|
||||
|
||||
import com.zhuinden.monarchy.Monarchy
|
||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||
import im.vector.matrix.android.api.session.Session
|
||||
import im.vector.matrix.android.api.session.cache.CacheService
|
||||
import im.vector.matrix.android.api.session.content.ContentUploadStateTracker
|
||||
import im.vector.matrix.android.api.session.content.ContentUrlResolver
|
||||
import im.vector.matrix.android.api.session.group.GroupService
|
||||
import im.vector.matrix.android.api.session.room.RoomDirectoryService
|
||||
import im.vector.matrix.android.api.session.room.RoomService
|
||||
import im.vector.matrix.android.api.session.signout.SignOutService
|
||||
import im.vector.matrix.android.api.session.sync.FilterService
|
||||
import im.vector.matrix.android.api.session.user.UserService
|
||||
import im.vector.matrix.android.internal.crypto.CryptoManager
|
||||
import im.vector.matrix.android.internal.database.LiveEntityObserver
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import im.vector.matrix.android.internal.session.sync.job.SyncThread
|
||||
import javax.inject.Inject
|
||||
|
||||
@MatrixScope
|
||||
internal class SessionFactory @Inject constructor(
|
||||
private val monarchy: Monarchy,
|
||||
private val liveEntityUpdaters: List<LiveEntityObserver>,
|
||||
private val sessionListeners: SessionListeners,
|
||||
private val roomService: RoomService,
|
||||
private val roomDirectoryService: RoomDirectoryService,
|
||||
private val groupService: GroupService,
|
||||
private val userService: UserService,
|
||||
private val filterService: FilterService,
|
||||
private val cacheService: CacheService,
|
||||
private val signOutService: SignOutService,
|
||||
private val cryptoService: CryptoManager,
|
||||
private val syncThread: SyncThread,
|
||||
private val contentUrlResolver: ContentUrlResolver,
|
||||
private val contentUploadProgressTracker: ContentUploadStateTracker) {
|
||||
|
||||
|
||||
fun create(sessionParams: SessionParams): Session {
|
||||
return DefaultSession(
|
||||
sessionParams,
|
||||
monarchy,
|
||||
liveEntityUpdaters,
|
||||
sessionListeners,
|
||||
roomService,
|
||||
roomDirectoryService,
|
||||
groupService,
|
||||
userService,
|
||||
filterService,
|
||||
cacheService,
|
||||
signOutService,
|
||||
cryptoService,
|
||||
syncThread,
|
||||
contentUrlResolver,
|
||||
contentUploadProgressTracker
|
||||
)
|
||||
}
|
||||
|
||||
}
|
@ -33,17 +33,21 @@ import im.vector.matrix.android.internal.util.md5
|
||||
import io.realm.RealmConfiguration
|
||||
import retrofit2.Retrofit
|
||||
import java.io.File
|
||||
import javax.inject.Named
|
||||
|
||||
@Module
|
||||
internal class SessionModule(private val sessionParams: SessionParams) {
|
||||
internal object SessionModule {
|
||||
|
||||
@Provides
|
||||
fun providesCredentials(): Credentials {
|
||||
@SessionScope
|
||||
fun providesCredentials(sessionParams: SessionParams): Credentials {
|
||||
return sessionParams.credentials
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun providesRealmConfiguration(context: Context): RealmConfiguration {
|
||||
@SessionScope
|
||||
@Named("SessionRealmConfiguration")
|
||||
fun providesRealmConfiguration(sessionParams: SessionParams, context: Context): RealmConfiguration {
|
||||
val childPath = sessionParams.credentials.userId.md5()
|
||||
val directory = File(context.filesDir, childPath)
|
||||
|
||||
@ -56,25 +60,30 @@ internal class SessionModule(private val sessionParams: SessionParams) {
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun providesMonarchy(realmConfiguration: RealmConfiguration): Monarchy {
|
||||
@SessionScope
|
||||
fun providesMonarchy(@Named("SessionRealmConfiguration")
|
||||
realmConfiguration: RealmConfiguration): Monarchy {
|
||||
return Monarchy.Builder()
|
||||
.setRealmConfiguration(realmConfiguration)
|
||||
.build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
fun providesRetrofit(retrofitBuilder: Retrofit.Builder): Retrofit {
|
||||
@SessionScope
|
||||
fun providesRetrofit(sessionParams: SessionParams, retrofitBuilder: Retrofit.Builder): Retrofit {
|
||||
return retrofitBuilder
|
||||
.baseUrl(sessionParams.homeServerConnectionConfig.homeServerUri.toString())
|
||||
.build()
|
||||
}
|
||||
|
||||
@Provides
|
||||
@SessionScope
|
||||
fun providesFilterAPI(retrofit: Retrofit): FilterApi {
|
||||
return retrofit.create(FilterApi::class.java)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@SessionScope
|
||||
fun providesLiveEntityObservers(groupSummaryUpdater: GroupSummaryUpdater,
|
||||
userEntityUpdater: UserEntityUpdater,
|
||||
aggregationUpdater: EventRelationsAggregationUpdater,
|
||||
@ -82,5 +91,4 @@ internal class SessionModule(private val sessionParams: SessionParams) {
|
||||
return listOf<LiveEntityObserver>(groupSummaryUpdater, userEntityUpdater, aggregationUpdater, eventsPruner)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
38
matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/cache/CacheModule.kt
vendored
Normal file
38
matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/cache/CacheModule.kt
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.session.cache
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import im.vector.matrix.android.api.session.cache.CacheService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
|
||||
@Module
|
||||
internal abstract class CacheModule {
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindCacheService(cacheService: DefaultCacheService): CacheService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindClearCacheTask(clearCacheTask: RealmClearCacheTask): ClearCacheTask
|
||||
|
||||
|
||||
}
|
@ -24,8 +24,8 @@ import im.vector.matrix.android.internal.task.configureWith
|
||||
import javax.inject.Inject
|
||||
|
||||
@SessionScope
|
||||
internal class RealmCacheService @Inject constructor(private val clearCacheTask: ClearCacheTask,
|
||||
private val taskExecutor: TaskExecutor) : CacheService {
|
||||
internal class DefaultCacheService @Inject constructor(private val clearCacheTask: ClearCacheTask,
|
||||
private val taskExecutor: TaskExecutor) : CacheService {
|
||||
|
||||
override fun clearCache(callback: MatrixCallback<Unit>) {
|
||||
clearCacheTask
|
@ -16,10 +16,20 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.content
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import im.vector.matrix.android.api.session.content.ContentUploadStateTracker
|
||||
import im.vector.matrix.android.api.session.content.ContentUrlResolver
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
|
||||
@Module
|
||||
internal class ContentModule {
|
||||
internal abstract class ContentModule {
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindContentUploadStateTracker(contentUploadStateTracker: DefaultContentUploadStateTracker): ContentUploadStateTracker
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindContentUrlResolver(contentUrlResolver: DefaultContentUrlResolver): ContentUrlResolver
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ package im.vector.matrix.android.internal.session.content
|
||||
|
||||
import arrow.core.Try
|
||||
import arrow.core.Try.Companion.raise
|
||||
import com.squareup.moshi.Moshi
|
||||
import im.vector.matrix.android.api.auth.data.SessionParams
|
||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
||||
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
||||
@ -30,11 +31,10 @@ import javax.inject.Inject
|
||||
|
||||
@SessionScope
|
||||
internal class FileUploader @Inject constructor(private val okHttpClient: OkHttpClient,
|
||||
sessionParams: SessionParams) {
|
||||
private val sessionParams: SessionParams,
|
||||
private val moshi: Moshi) {
|
||||
|
||||
private val uploadUrl = DefaultContentUrlResolver.getUploadUrl(sessionParams.homeServerConnectionConfig)
|
||||
|
||||
private val moshi = MoshiProvider.providesMoshi()
|
||||
private val responseAdapter = moshi.adapter(ContentUploadResponse::class.java)
|
||||
|
||||
|
||||
|
@ -31,7 +31,7 @@ import im.vector.matrix.android.api.session.room.model.message.MessageContent
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageFileContent
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageImageContent
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageVideoContent
|
||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
import im.vector.matrix.android.internal.network.ProgressRequestBody
|
||||
import im.vector.matrix.android.internal.session.room.send.SendEventWorker
|
||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||
@ -138,7 +138,7 @@ internal class UploadContentWorker @AssistedInject constructor(
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : ChildWorkerFactory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,54 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.session.filter
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.api.session.sync.FilterService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import retrofit2.Retrofit
|
||||
|
||||
@Module
|
||||
internal abstract class FilterModule {
|
||||
|
||||
@Module
|
||||
companion object {
|
||||
@SessionScope
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesFilterApi(retrofit: Retrofit): FilterApi {
|
||||
return retrofit.create(FilterApi::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindFilterRepository(filterRepository: DefaultFilterRepository): FilterRepository
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindFilterService(filterService: DefaultFilterService): FilterService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindSaveFilterTask(saveFilterTask_Factory: DefaultSaveFilterTask): SaveFilterTask
|
||||
|
||||
|
||||
}
|
@ -25,8 +25,10 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
|
||||
import im.vector.matrix.android.internal.database.model.GroupSummaryEntity
|
||||
import im.vector.matrix.android.internal.database.model.GroupSummaryEntityFields
|
||||
import im.vector.matrix.android.internal.database.query.where
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import javax.inject.Inject
|
||||
|
||||
@SessionScope
|
||||
internal class DefaultGroupService @Inject constructor(private val monarchy: Monarchy) : GroupService {
|
||||
|
||||
override fun getGroup(groupId: String): Group? {
|
||||
|
@ -23,7 +23,7 @@ import arrow.core.Try
|
||||
import com.squareup.inject.assisted.Assisted
|
||||
import com.squareup.inject.assisted.AssistedInject
|
||||
import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||
|
||||
internal class GetGroupDataWorker @AssistedInject constructor(
|
||||
@ -53,6 +53,6 @@ internal class GetGroupDataWorker @AssistedInject constructor(
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : ChildWorkerFactory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
|
||||
}
|
@ -16,15 +16,31 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.group
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.api.session.group.GroupService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import retrofit2.Retrofit
|
||||
|
||||
@Module
|
||||
internal class GroupModule {
|
||||
internal abstract class GroupModule {
|
||||
|
||||
@SessionScope
|
||||
fun providesGroupAPI(retrofit: Retrofit): GroupAPI {
|
||||
return retrofit.create(GroupAPI::class.java)
|
||||
@Module
|
||||
companion object {
|
||||
@SessionScope
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesGroupAPI(retrofit: Retrofit): GroupAPI {
|
||||
return retrofit.create(GroupAPI::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindGetGroupDataTask(getGroupDataTask: DefaultGetGroupDataTask): GetGroupDataTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindGroupService(groupService: DefaultGroupService): GroupService
|
||||
}
|
@ -33,8 +33,11 @@ import im.vector.matrix.android.internal.database.mapper.asDomain
|
||||
import im.vector.matrix.android.internal.database.model.RoomSummaryEntity
|
||||
import im.vector.matrix.android.internal.database.model.RoomSummaryEntityFields
|
||||
import im.vector.matrix.android.internal.database.query.where
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class DefaultRoom(
|
||||
@SessionScope
|
||||
internal class DefaultRoom @Inject constructor(
|
||||
override val roomId: String,
|
||||
private val monarchy: Monarchy,
|
||||
private val timelineService: TimelineService,
|
||||
|
@ -50,7 +50,7 @@ internal class DefaultRoomService @Inject constructor(private val monarchy: Mona
|
||||
|
||||
override fun getRoom(roomId: String): Room? {
|
||||
monarchy.fetchManaged { RoomEntity.where(it, roomId).findFirst() } ?: return null
|
||||
return roomFactory.instantiate(roomId)
|
||||
return roomFactory.create(roomId)
|
||||
}
|
||||
|
||||
override fun liveRoomSummaries(): LiveData<List<RoomSummary>> {
|
||||
|
@ -58,7 +58,7 @@ internal class RoomFactory @Inject constructor(private val monarchy: Monarchy,
|
||||
private val joinRoomTask: JoinRoomTask,
|
||||
private val leaveRoomTask: LeaveRoomTask) {
|
||||
|
||||
fun instantiate(roomId: String): Room {
|
||||
fun create(roomId: String): Room {
|
||||
val roomMemberExtractor = SenderRoomMemberExtractor(roomId)
|
||||
val relationExtractor = EventRelationExtractor()
|
||||
val timelineEventFactory = TimelineEventFactory(roomMemberExtractor, relationExtractor, cryptoService)
|
||||
|
@ -16,12 +16,26 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.room
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.api.session.room.RoomDirectoryService
|
||||
import im.vector.matrix.android.api.session.room.RoomService
|
||||
import im.vector.matrix.android.api.session.room.members.MembershipService
|
||||
import im.vector.matrix.android.api.session.room.model.relation.RelationService
|
||||
import im.vector.matrix.android.api.session.room.read.ReadService
|
||||
import im.vector.matrix.android.api.session.room.send.SendService
|
||||
import im.vector.matrix.android.api.session.room.state.StateService
|
||||
import im.vector.matrix.android.api.session.room.timeline.TimelineService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.room.create.CreateRoomTask
|
||||
import im.vector.matrix.android.internal.session.room.create.DefaultCreateRoomTask
|
||||
import im.vector.matrix.android.internal.session.room.directory.DefaultGetPublicRoomTask
|
||||
import im.vector.matrix.android.internal.session.room.directory.DefaultGetThirdPartyProtocolsTask
|
||||
import im.vector.matrix.android.internal.session.room.directory.GetPublicRoomTask
|
||||
import im.vector.matrix.android.internal.session.room.directory.GetThirdPartyProtocolsTask
|
||||
import im.vector.matrix.android.internal.session.room.membership.DefaultLoadRoomMembersTask
|
||||
import im.vector.matrix.android.internal.session.room.membership.DefaultMembershipService
|
||||
import im.vector.matrix.android.internal.session.room.membership.LoadRoomMembersTask
|
||||
import im.vector.matrix.android.internal.session.room.membership.joining.DefaultInviteTask
|
||||
import im.vector.matrix.android.internal.session.room.membership.joining.DefaultJoinRoomTask
|
||||
@ -31,30 +45,115 @@ import im.vector.matrix.android.internal.session.room.membership.leaving.Default
|
||||
import im.vector.matrix.android.internal.session.room.membership.leaving.LeaveRoomTask
|
||||
import im.vector.matrix.android.internal.session.room.prune.DefaultPruneEventTask
|
||||
import im.vector.matrix.android.internal.session.room.prune.PruneEventTask
|
||||
import im.vector.matrix.android.internal.session.room.read.DefaultReadService
|
||||
import im.vector.matrix.android.internal.session.room.read.DefaultSetReadMarkersTask
|
||||
import im.vector.matrix.android.internal.session.room.read.SetReadMarkersTask
|
||||
import im.vector.matrix.android.internal.session.room.relation.DefaultFindReactionEventForUndoTask
|
||||
import im.vector.matrix.android.internal.session.room.relation.DefaultUpdateQuickReactionTask
|
||||
import im.vector.matrix.android.internal.session.room.relation.FindReactionEventForUndoTask
|
||||
import im.vector.matrix.android.internal.session.room.relation.UpdateQuickReactionTask
|
||||
import im.vector.matrix.android.internal.session.room.send.LocalEchoEventFactory
|
||||
import im.vector.matrix.android.internal.session.room.send.LocalEchoUpdater
|
||||
import im.vector.matrix.android.internal.session.room.state.DefaultSendStateTask
|
||||
import im.vector.matrix.android.internal.session.room.state.SendStateTask
|
||||
import im.vector.matrix.android.internal.session.room.timeline.DefaultGetContextOfEventTask
|
||||
import im.vector.matrix.android.internal.session.room.timeline.DefaultPaginationTask
|
||||
import im.vector.matrix.android.internal.session.room.timeline.GetContextOfEventTask
|
||||
import im.vector.matrix.android.internal.session.room.timeline.PaginationTask
|
||||
import im.vector.matrix.android.internal.session.room.timeline.TokenChunkEventPersistor
|
||||
import im.vector.matrix.android.internal.session.room.relation.*
|
||||
import im.vector.matrix.android.internal.session.room.send.DefaultSendService
|
||||
import im.vector.matrix.android.internal.session.room.state.DefaultStateService
|
||||
import im.vector.matrix.android.internal.session.room.timeline.*
|
||||
import retrofit2.Retrofit
|
||||
|
||||
@Module
|
||||
internal class RoomModule {
|
||||
internal abstract class RoomModule {
|
||||
|
||||
@SessionScope
|
||||
@Provides
|
||||
fun providesRoomAPI(retrofit: Retrofit): RoomAPI {
|
||||
return retrofit.create(RoomAPI::class.java)
|
||||
@Module
|
||||
companion object {
|
||||
@SessionScope
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesRoomAPI(retrofit: Retrofit): RoomAPI {
|
||||
return retrofit.create(RoomAPI::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindRoomService(roomService: DefaultRoomService): RoomService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindRoomDirectoryService(roomDirectoryService: DefaultRoomDirectoryService): RoomDirectoryService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindEventRelationsAggregationTask(eventRelationsAggregationTask: DefaultEventRelationsAggregationTask): EventRelationsAggregationTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindCreateRoomTask(createRoomTask: DefaultCreateRoomTask): CreateRoomTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindGetPublicRoomTask(getPublicRoomTask: DefaultGetPublicRoomTask): GetPublicRoomTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindGetThirdPartyProtocolsTask(getThirdPartyProtocolsTask: DefaultGetThirdPartyProtocolsTask): GetThirdPartyProtocolsTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindInviteTask(inviteTask: DefaultInviteTask): InviteTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindJoinRoomTask(joinRoomTask: DefaultJoinRoomTask): JoinRoomTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindLeaveRoomTask(leaveRoomTask: DefaultLeaveRoomTask): LeaveRoomTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindMembershipService(membershipService: DefaultMembershipService): MembershipService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindLoadRoomMembersTask(loadRoomMembersTask: DefaultLoadRoomMembersTask): LoadRoomMembersTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindPruneEventTask(pruneEventTask: DefaultPruneEventTask): PruneEventTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindReadService(readService: DefaultReadService): ReadService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindSetReadMarkersTask(setReadMarkersTask: DefaultSetReadMarkersTask): SetReadMarkersTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindRelationService(relationService: DefaultRelationService): RelationService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindFindReactionEventForUndoTask(findReactionEventForUndoTask: DefaultFindReactionEventForUndoTask): FindReactionEventForUndoTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindUpdateQuickReactionTask(updateQuickReactionTask: DefaultUpdateQuickReactionTask): UpdateQuickReactionTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindSendService(sendService: DefaultSendService): SendService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindStateService(stateService: DefaultStateService): StateService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindGetContextOfEventTask(getContextOfEventTask: DefaultGetContextOfEventTask): GetContextOfEventTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindPaginationTask(paginationTask: DefaultPaginationTask): PaginationTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindTimelineService(timelineService: DefaultTimelineService): TimelineService
|
||||
|
||||
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ internal interface CreateRoomTask : Task<CreateRoomParams, String>
|
||||
|
||||
@SessionScope
|
||||
internal class DefaultCreateRoomTask @Inject constructor(private val roomAPI: RoomAPI,
|
||||
private val realmConfiguration: RealmConfiguration) : CreateRoomTask {
|
||||
private val realmConfiguration: RealmConfiguration) : CreateRoomTask {
|
||||
|
||||
|
||||
override suspend fun execute(params: CreateRoomParams): Try<String> {
|
||||
|
@ -26,7 +26,7 @@ import im.vector.matrix.android.api.session.events.model.Event
|
||||
import im.vector.matrix.android.api.session.events.model.toModel
|
||||
import im.vector.matrix.android.api.session.room.model.relation.ReactionContent
|
||||
import im.vector.matrix.android.api.session.room.model.relation.ReactionInfo
|
||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
import im.vector.matrix.android.internal.network.executeRequest
|
||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||
import im.vector.matrix.android.internal.session.room.send.SendResponse
|
||||
@ -82,5 +82,5 @@ internal class SendRelationWorker @AssistedInject constructor(
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : ChildWorkerFactory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
}
|
@ -19,6 +19,8 @@ package im.vector.matrix.android.internal.session.room.send
|
||||
import android.content.Context
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import com.squareup.inject.assisted.Assisted
|
||||
import com.squareup.inject.assisted.AssistedInject
|
||||
import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.api.MatrixCallback
|
||||
import im.vector.matrix.android.api.failure.Failure
|
||||
@ -26,13 +28,16 @@ import im.vector.matrix.android.api.session.crypto.CryptoService
|
||||
import im.vector.matrix.android.api.session.events.model.Event
|
||||
import im.vector.matrix.android.api.session.room.send.SendState
|
||||
import im.vector.matrix.android.internal.crypto.model.MXEncryptEventContentResult
|
||||
import im.vector.matrix.android.internal.di.MatrixKoinComponent
|
||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||
import org.koin.standalone.inject
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
import java.util.concurrent.CountDownLatch
|
||||
|
||||
internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
||||
: Worker(context, params), MatrixKoinComponent {
|
||||
internal class EncryptEventWorker @AssistedInject constructor(
|
||||
@Assisted context: Context,
|
||||
@Assisted params: WorkerParameters,
|
||||
private val crypto: CryptoService,
|
||||
private val localEchoUpdater: LocalEchoUpdater)
|
||||
: Worker(context, params) {
|
||||
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
@ -41,9 +46,6 @@ internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
||||
val event: Event
|
||||
)
|
||||
|
||||
private val crypto by inject<CryptoService>()
|
||||
private val localEchoUpdater by inject<LocalEchoUpdater>()
|
||||
|
||||
override fun doWork(): Result {
|
||||
|
||||
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
||||
@ -97,4 +99,8 @@ internal class EncryptEventWorker(context: Context, params: WorkerParameters)
|
||||
//always return success, or the chain will be stuck for ever!
|
||||
return Result.success()
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
|
||||
}
|
||||
|
@ -22,8 +22,11 @@ import im.vector.matrix.android.api.session.events.model.Event
|
||||
import im.vector.matrix.android.api.session.events.model.EventType
|
||||
import im.vector.matrix.android.api.session.room.model.message.MessageTextContent
|
||||
import im.vector.matrix.android.internal.di.MoshiProvider
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class EventFactory(private val credentials: Credentials) {
|
||||
@SessionScope
|
||||
internal class EventFactory @Inject constructor(private val credentials: Credentials) {
|
||||
|
||||
private val moshi = MoshiProvider.providesMoshi()
|
||||
|
||||
|
@ -18,16 +18,20 @@ package im.vector.matrix.android.internal.session.room.send
|
||||
import android.content.Context
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import com.squareup.inject.assisted.Assisted
|
||||
import com.squareup.inject.assisted.AssistedInject
|
||||
import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.api.failure.Failure
|
||||
import im.vector.matrix.android.internal.di.MatrixKoinComponent
|
||||
import im.vector.matrix.android.internal.network.executeRequest
|
||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||
import org.koin.standalone.inject
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
|
||||
internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
||||
: Worker(context, params), MatrixKoinComponent {
|
||||
internal class RedactEventWorker @AssistedInject constructor(
|
||||
@Assisted context: Context,
|
||||
@Assisted params: WorkerParameters,
|
||||
private val roomAPI: RoomAPI)
|
||||
: Worker(context, params) {
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
internal data class Params(
|
||||
@ -37,8 +41,6 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
||||
val reason: String?
|
||||
)
|
||||
|
||||
private val roomAPI by inject<RoomAPI>()
|
||||
|
||||
override fun doWork(): Result {
|
||||
val params = WorkerParamsFactory.fromData<Params>(inputData)
|
||||
?: return Result.failure()
|
||||
@ -66,4 +68,7 @@ internal class RedactEventWorker(context: Context, params: WorkerParameters)
|
||||
})
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
|
||||
}
|
@ -25,7 +25,7 @@ import com.squareup.moshi.JsonClass
|
||||
import im.vector.matrix.android.api.failure.Failure
|
||||
import im.vector.matrix.android.api.session.events.model.Event
|
||||
import im.vector.matrix.android.api.session.room.send.SendState
|
||||
import im.vector.matrix.android.internal.di.ChildWorkerFactory
|
||||
import im.vector.matrix.android.internal.worker.DelegateWorkerFactory
|
||||
import im.vector.matrix.android.internal.network.executeRequest
|
||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||
import im.vector.matrix.android.internal.util.WorkerParamsFactory
|
||||
@ -76,6 +76,6 @@ internal class SendEventWorker @AssistedInject constructor(
|
||||
}
|
||||
|
||||
@AssistedInject.Factory
|
||||
interface Factory : ChildWorkerFactory
|
||||
interface Factory : DelegateWorkerFactory
|
||||
|
||||
}
|
||||
|
@ -274,7 +274,7 @@ internal class DefaultTimeline(
|
||||
val newRequestedCount = count - builtCount
|
||||
updatePaginationState(direction) { it.copy(requestedCount = newRequestedCount) }
|
||||
val fetchingCount = Math.max(MIN_FETCHING_COUNT, newRequestedCount)
|
||||
executePaginationTask @Inject constructor(direction, fetchingCount)
|
||||
executePaginationTask(direction, fetchingCount)
|
||||
} else {
|
||||
updatePaginationState(direction) { it.copy(isPaginating = false, requestedCount = 0) }
|
||||
}
|
||||
@ -350,7 +350,7 @@ internal class DefaultTimeline(
|
||||
/**
|
||||
* This has to be called on TimelineThread as it access realm live results
|
||||
*/
|
||||
private fun executePaginationTask @Inject constructor(direction: Timeline.Direction, limit: Int) {
|
||||
private fun executePaginationTask(direction: Timeline.Direction, limit: Int) {
|
||||
val token = getTokenLive(direction) ?: return
|
||||
val params = PaginationTask.Params(roomId = roomId,
|
||||
from = token,
|
||||
@ -367,7 +367,7 @@ internal class DefaultTimeline(
|
||||
} else {
|
||||
// Database won't be updated, so we force pagination request
|
||||
backgroundHandler.get()?.post {
|
||||
executePaginationTask @Inject constructor(direction, limit)
|
||||
executePaginationTask(direction, limit)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -20,8 +20,11 @@ import arrow.core.Try
|
||||
import im.vector.matrix.android.api.session.events.model.Event
|
||||
import im.vector.matrix.android.internal.task.Task
|
||||
import im.vector.matrix.android.internal.network.executeRequest
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.room.RoomAPI
|
||||
import javax.inject.Inject
|
||||
|
||||
@SessionScope
|
||||
internal class GetEventTask @Inject constructor(private val roomAPI: RoomAPI
|
||||
) : Task<GetEventTask.Params, Event> {
|
||||
|
||||
|
@ -16,16 +16,34 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.signout
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.api.session.signout.SignOutService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.user.DefaultUpdateUserTask
|
||||
import im.vector.matrix.android.internal.session.user.UpdateUserTask
|
||||
import retrofit2.Retrofit
|
||||
|
||||
@Module
|
||||
internal class SignOutModule {
|
||||
internal abstract class SignOutModule {
|
||||
|
||||
@SessionScope
|
||||
fun providesSignOutAPI(retrofit: Retrofit): SignOutAPI {
|
||||
return retrofit.create(SignOutAPI::class.java)
|
||||
@Module
|
||||
companion object {
|
||||
@SessionScope
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesSignOutAPI(retrofit: Retrofit): SignOutAPI {
|
||||
return retrofit.create(SignOutAPI::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindSignOutTask(signOutTask: DefaultSignOutTask): SignOutTask
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindSignOutService(signOutService: DefaultSignOutService): SignOutService
|
||||
|
||||
}
|
@ -16,16 +16,28 @@
|
||||
|
||||
package im.vector.matrix.android.internal.session.sync
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
import im.vector.matrix.android.internal.session.user.DefaultUpdateUserTask
|
||||
import im.vector.matrix.android.internal.session.user.UpdateUserTask
|
||||
import retrofit2.Retrofit
|
||||
|
||||
@Module
|
||||
internal class SyncModule {
|
||||
internal abstract class SyncModule {
|
||||
|
||||
@SessionScope
|
||||
fun providesSyncAPI(retrofit: Retrofit): SyncAPI {
|
||||
return retrofit.create(SyncAPI::class.java)
|
||||
@Module
|
||||
companion object {
|
||||
@SessionScope
|
||||
@Provides
|
||||
@JvmStatic
|
||||
fun providesSyncAPI(retrofit: Retrofit): SyncAPI {
|
||||
return retrofit.create(SyncAPI::class.java)
|
||||
}
|
||||
}
|
||||
|
||||
@Binds
|
||||
abstract fun bindSyncTask(syncTask: DefaultSyncTask): SyncTask
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.session.user
|
||||
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import im.vector.matrix.android.api.session.user.UserService
|
||||
import im.vector.matrix.android.internal.session.SessionScope
|
||||
|
||||
@Module
|
||||
internal abstract class UserModule {
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindUserService(userService: DefaultUserService): UserService
|
||||
|
||||
@Binds
|
||||
@SessionScope
|
||||
abstract fun bindUpdateUserTask(updateUserTask: DefaultUpdateUserTask): UpdateUserTask
|
||||
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.worker
|
||||
|
||||
import androidx.work.ListenableWorker
|
||||
import dagger.Binds
|
||||
import dagger.MapKey
|
||||
import dagger.Module
|
||||
import dagger.multibindings.IntoMap
|
||||
import im.vector.matrix.android.internal.session.content.UploadContentWorker
|
||||
import im.vector.matrix.android.internal.session.group.GetGroupDataWorker
|
||||
import im.vector.matrix.android.internal.session.room.relation.SendRelationWorker
|
||||
import im.vector.matrix.android.internal.session.room.send.EncryptEventWorker
|
||||
import im.vector.matrix.android.internal.session.room.send.RedactEventWorker
|
||||
import im.vector.matrix.android.internal.session.room.send.SendEventWorker
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
@MapKey
|
||||
@Target(AnnotationTarget.FUNCTION)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
internal annotation class WorkerKey(val value: KClass<out ListenableWorker>)
|
||||
|
||||
@Module
|
||||
internal interface WorkerBindingModule {
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(SendEventWorker::class)
|
||||
fun bindSendEventWorker(factory: SendEventWorker.Factory): DelegateWorkerFactory
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(SendRelationWorker::class)
|
||||
fun bindSendRelationWorker(factory: SendRelationWorker.Factory): DelegateWorkerFactory
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(EncryptEventWorker::class)
|
||||
fun bindEncryptEventWorker(factory: EncryptEventWorker.Factory): DelegateWorkerFactory
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(RedactEventWorker::class)
|
||||
fun bindRedactEventWorker(factory: RedactEventWorker.Factory): DelegateWorkerFactory
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(GetGroupDataWorker::class)
|
||||
fun bindGetGroupDataWorker(factory: GetGroupDataWorker.Factory): DelegateWorkerFactory
|
||||
|
||||
@Binds
|
||||
@IntoMap
|
||||
@WorkerKey(UploadContentWorker::class)
|
||||
fun bindUploadContentWorker(factory: UploadContentWorker.Factory): DelegateWorkerFactory
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.worker
|
||||
|
||||
import android.content.Context
|
||||
import androidx.work.ListenableWorker
|
||||
import androidx.work.WorkerParameters
|
||||
|
||||
interface DelegateWorkerFactory {
|
||||
|
||||
fun create(appContext: Context, workerParameters: WorkerParameters): ListenableWorker
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright 2019 New Vector Ltd
|
||||
* *
|
||||
* * Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* * you may not use this file except in compliance with the License.
|
||||
* * You may obtain a copy of the License at
|
||||
* *
|
||||
* * http://www.apache.org/licenses/LICENSE-2.0
|
||||
* *
|
||||
* * Unless required by applicable law or agreed to in writing, software
|
||||
* * distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* * See the License for the specific language governing permissions and
|
||||
* * limitations under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
package im.vector.matrix.android.internal.worker
|
||||
|
||||
import android.content.Context
|
||||
import androidx.work.ListenableWorker
|
||||
import androidx.work.WorkerFactory
|
||||
import androidx.work.WorkerParameters
|
||||
import im.vector.matrix.android.internal.di.MatrixScope
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Provider
|
||||
|
||||
@MatrixScope
|
||||
class MatrixWorkerFactory @Inject constructor(
|
||||
private val workerFactories: Map<Class<out ListenableWorker>, @JvmSuppressWildcards Provider<DelegateWorkerFactory>>
|
||||
) : WorkerFactory() {
|
||||
|
||||
override fun createWorker(
|
||||
appContext: Context,
|
||||
workerClassName: String,
|
||||
workerParameters: WorkerParameters
|
||||
): ListenableWorker? {
|
||||
val foundEntry =
|
||||
workerFactories.entries.find { Class.forName(workerClassName).isAssignableFrom(it.key) }
|
||||
val factoryProvider = foundEntry?.value
|
||||
?: throw IllegalArgumentException("unknown worker class name: $workerClassName")
|
||||
return factoryProvider.get().create(appContext, workerParameters)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user