app/src/main/java/com/geekorum/ttrss/accounts/di.kt
author Da Risk <da_risk@geekorum.com>
Sun, 17 Nov 2019 18:16:28 -0800
changeset 560 67bb424bb68b
parent 521 2a5be03dd6bc
child 611 91b8d76c03cd
permissions -rw-r--r--
Update to daggger-2.25.2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
137
5464f07a306c Update copyright headers for 2019
Da Risk <da_risk@geekorum.com>
parents: 104
diff changeset
     1
/*
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     2
 * Geekttrss is a RSS feed reader application on the Android Platform.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     3
 *
137
5464f07a306c Update copyright headers for 2019
Da Risk <da_risk@geekorum.com>
parents: 104
diff changeset
     4
 * Copyright (C) 2017-2019 by Frederic-Charles Barthelery.
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     5
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     6
 * This file is part of Geekttrss.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     7
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     8
 * Geekttrss is free software: you can redistribute it and/or modify
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     9
 * it under the terms of the GNU General Public License as published by
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    10
 * the Free Software Foundation, either version 3 of the License, or
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    11
 * (at your option) any later version.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    12
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    13
 * Geekttrss is distributed in the hope that it will be useful,
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    16
 * GNU General Public License for more details.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    17
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    18
 * You should have received a copy of the GNU General Public License
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    19
 * along with Geekttrss.  If not, see <http://www.gnu.org/licenses/>.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    20
 */
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    21
package com.geekorum.ttrss.accounts
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    22
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    23
import android.accounts.Account
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    24
import android.accounts.AccountManager
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    25
import android.app.Activity
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    26
import android.content.Context
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    27
import androidx.lifecycle.ViewModel
164
2d6e9f2063cd Replace ViewModelsFactory by DaggerDelegateViewModelFactory
Da Risk <da_risk@geekorum.com>
parents: 137
diff changeset
    28
import com.geekorum.geekdroid.dagger.ViewModelKey
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    29
import com.geekorum.geekdroid.security.SecretEncryption
521
2a5be03dd6bc Use CoroutineDispatchersProvider everywhere
Da Risk <da_risk@geekorum.com>
parents: 417
diff changeset
    30
import com.geekorum.ttrss.core.CoroutineDispatchersProvider
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    31
import com.geekorum.ttrss.network.TinyrssApiModule
312
acd822d279e3 app: use Webapi and remove network/impl based api
Da Risk <da_risk@geekorum.com>
parents: 244
diff changeset
    32
import com.geekorum.ttrss.webapi.LoggedRequestInterceptorFactory
acd822d279e3 app: use Webapi and remove network/impl based api
Da Risk <da_risk@geekorum.com>
parents: 244
diff changeset
    33
import com.geekorum.ttrss.webapi.TinyRssApi
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    34
import dagger.Binds
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    35
import dagger.Module
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    36
import dagger.Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    37
import dagger.Subcomponent
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    38
import dagger.android.ContributesAndroidInjector
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    39
import dagger.multibindings.IntoMap
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
import javax.inject.Scope
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    41
import kotlin.annotation.AnnotationRetention.RUNTIME
417
8ba896069f2f Account: Use webapi TokenRetriever
Da Risk <da_risk@geekorum.com>
parents: 312
diff changeset
    42
import com.geekorum.ttrss.webapi.TokenRetriever
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    43
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    44
/**
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    45
 * Dependency injection pieces for the account authenticator functionality.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    46
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    47
 * AuthenticatorService has a SubComponent of the ApplicationComponent.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    48
 * The AuthenticatorNetworkComponent is a  SubSubComponent that allows to do network
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    49
 * request with the Account backend
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    51
 */
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    52
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    53
@Retention(RUNTIME)
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    54
@MustBeDocumented
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    55
@Scope
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    56
annotation class PerAccount
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    57
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
@Module
560
67bb424bb68b Update to daggger-2.25.2
Da Risk <da_risk@geekorum.com>
parents: 521
diff changeset
    59
object AndroidTinyrssAccountManagerModule {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    60
560
67bb424bb68b Update to daggger-2.25.2
Da Risk <da_risk@geekorum.com>
parents: 521
diff changeset
    61
    private const val KEY_ALIAS = "com.geekorum.geekttrss.accounts.AccountManagerKey"
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    62
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    63
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    64
    fun providesAndroidTinyrssAccountManager(accountManager: AccountManager, secretEncryption: SecretEncryption): AndroidTinyrssAccountManager {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    65
        val secretCipher = secretEncryption.getSecretCipher(KEY_ALIAS)
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
        return AndroidTinyrssAccountManager(accountManager, secretCipher)
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    68
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    69
    // may be replaced by a @Bind but it complicates the syntax in kotlin
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    70
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    71
    fun providesTinyrssAccountManager(androidTinyrssAccountManager: AndroidTinyrssAccountManager): TinyrssAccountManager {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    72
        return androidTinyrssAccountManager
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    73
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    74
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    75
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    76
/**
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    77
 * Provides the Services injectors subcomponents.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    78
 */
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    79
@Module
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    80
abstract class ServicesInjectorModule {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    81
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    82
    @ContributesAndroidInjector(modules = [AuthenticatorServiceModule::class])
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    83
    internal abstract fun contributesAuthenticatorServiceInjector(): AuthenticatorService
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    84
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    85
    @ContributesAndroidInjector(modules = [AuthenticatorActivityModule::class, ViewModelsModule::class])
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    86
    internal abstract fun contributesLoginActivityInjector(): LoginActivity
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    87
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    88
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    89
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    90
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    91
@Module
560
67bb424bb68b Update to daggger-2.25.2
Da Risk <da_risk@geekorum.com>
parents: 521
diff changeset
    92
object NetworkLoginModule {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    93
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    94
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    95
    @PerAccount
521
2a5be03dd6bc Use CoroutineDispatchersProvider everywhere
Da Risk <da_risk@geekorum.com>
parents: 417
diff changeset
    96
    fun providesTokenRetriever(dispatchers: CoroutineDispatchersProvider,
2a5be03dd6bc Use CoroutineDispatchersProvider everywhere
Da Risk <da_risk@geekorum.com>
parents: 417
diff changeset
    97
                               accountManager: AccountManager, account: Account): TokenRetriever {
2a5be03dd6bc Use CoroutineDispatchersProvider everywhere
Da Risk <da_risk@geekorum.com>
parents: 417
diff changeset
    98
        return TinyrssAccountTokenRetriever(dispatchers, accountManager, account)
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    99
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   100
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   101
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   102
    @PerAccount
417
8ba896069f2f Account: Use webapi TokenRetriever
Da Risk <da_risk@geekorum.com>
parents: 312
diff changeset
   103
    fun providesLoggedRequestInterceptorFactory(tokenRetriever: TokenRetriever): LoggedRequestInterceptorFactory {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   104
        return LoggedRequestInterceptorFactory(tokenRetriever)
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   105
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   106
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   107
    @Provides
104
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   108
    fun providesServerInformation(accountManager: AndroidTinyrssAccountManager, account: Account): ServerInformation {
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   109
        return with(accountManager) {
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   110
            val ttRssAccount = fromAndroidAccount(account)
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   111
            getServerInformation(ttRssAccount)
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   112
        }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   113
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   114
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   115
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   116
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   117
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   118
@Module(subcomponents = [AuthenticatorNetworkComponent::class])
560
67bb424bb68b Update to daggger-2.25.2
Da Risk <da_risk@geekorum.com>
parents: 521
diff changeset
   119
internal object AuthenticatorServiceModule {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   120
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   121
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   122
    fun providesContext(service: AuthenticatorService): Context {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   123
        return service
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   124
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   125
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   126
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   127
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   128
@Module(subcomponents = [AuthenticatorNetworkComponent::class])
560
67bb424bb68b Update to daggger-2.25.2
Da Risk <da_risk@geekorum.com>
parents: 521
diff changeset
   129
internal object AuthenticatorActivityModule {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   130
    @Provides
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   131
    fun providesContext(activity: Activity): Context {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   132
        return activity
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   133
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   134
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   135
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   136
104
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   137
@Subcomponent(modules = [TinyRssServerInformationModule::class, TinyrssApiModule::class])
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   138
internal interface AuthenticatorNetworkComponent {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   139
    fun getTinyRssApi(): TinyRssApi
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   140
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   141
    @Subcomponent.Builder
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   142
    interface Builder {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   143
        fun build(): AuthenticatorNetworkComponent
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   144
104
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   145
        fun tinyRssServerInformationModule(module: TinyRssServerInformationModule): Builder
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   146
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   147
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   148
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   149
@Module
104
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   150
internal class TinyRssServerInformationModule(val serverInformation: ServerInformation) {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   151
    @Provides
104
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   152
    fun providesServerInformation(): ServerInformation {
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   153
        return serverInformation
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   154
    }
8b4047ebec59 Accounts: store a ServerInformation in the account manager
Da Risk <da_risk@geekorum.com>
parents: 0
diff changeset
   155
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   156
}
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   157
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   158
@Module
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   159
private abstract class ViewModelsModule {
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   160
    @Binds
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   161
    @IntoMap
164
2d6e9f2063cd Replace ViewModelsFactory by DaggerDelegateViewModelFactory
Da Risk <da_risk@geekorum.com>
parents: 137
diff changeset
   162
    @ViewModelKey(LoginViewModel::class)
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   163
    abstract fun getLoginViewModel(loginViewModel: LoginViewModel): ViewModel
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   164
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   165
}