Skip to content

Commit 6c76c80

Browse files
authored
Merge pull request #152 from soramitsu/rc/1.2.1
Rc/1.2.1
2 parents 362521e + e10ef2d commit 6c76c80

File tree

141 files changed

+2995
-2737
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

141 files changed

+2995
-2737
lines changed

app/build.gradle

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,6 @@ dependencies {
9595
implementation navigationFragmentDep
9696
implementation navigationUiDep
9797

98-
implementation rxJavaDep
99-
implementation rxAndroidDep
100-
10198
implementation roomDep
10299

103100
implementation fearlessLibDep
@@ -110,11 +107,12 @@ dependencies {
110107

111108
implementation retrofitDep
112109
implementation gsonConvertedDep
113-
implementation rxCallAdapterDep
114110

115111
implementation gifDep
116112

117113
compileOnly wsDep
114+
115+
implementation coroutinesDep
118116
}
119117

120118
task printVersion {

app/src/main/java/jp/co/soramitsu/app/root/di/RootDependencies.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import jp.co.soramitsu.common.data.network.rpc.ConnectionManager
55
import jp.co.soramitsu.common.mixin.api.NetworkStateMixin
66
import jp.co.soramitsu.common.resources.ResourceManager
77
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
8+
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
89
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
910
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
1011

@@ -22,4 +23,6 @@ interface RootDependencies {
2223
fun buyTokenRegistry(): BuyTokenRegistry
2324

2425
fun resourceManager(): ResourceManager
26+
27+
fun walletUpdaters(): WalletUpdaters
2528
}

app/src/main/java/jp/co/soramitsu/app/root/di/RootFeatureModule.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,32 @@ package jp.co.soramitsu.app.root.di
22

33
import dagger.Module
44
import dagger.Provides
5+
import jp.co.soramitsu.app.root.domain.CompositeUpdater
56
import jp.co.soramitsu.app.root.domain.RootInteractor
67
import jp.co.soramitsu.common.di.scope.FeatureScope
8+
import jp.co.soramitsu.core_api.data.network.Updater
79
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
8-
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
10+
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
911
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
1012

1113
@Module
1214
class RootFeatureModule {
1315

16+
@Provides
17+
@FeatureScope
18+
fun provideRootUpdater(
19+
walletUpdaters: WalletUpdaters
20+
): Updater {
21+
return CompositeUpdater(walletUpdaters.updaters)
22+
}
23+
1424
@Provides
1525
@FeatureScope
1626
fun provideRootInteractor(
1727
accountRepository: AccountRepository,
18-
walletRepository: WalletRepository,
28+
rootUpdater: Updater,
1929
buyTokenRegistry: BuyTokenRegistry
2030
): RootInteractor {
21-
return RootInteractor(accountRepository, buyTokenRegistry, walletRepository)
31+
return RootInteractor(accountRepository, rootUpdater, buyTokenRegistry)
2232
}
2333
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package jp.co.soramitsu.app.root.domain
2+
3+
import jp.co.soramitsu.core_api.data.network.Updater
4+
import kotlinx.coroutines.Dispatchers
5+
import kotlinx.coroutines.async
6+
import kotlinx.coroutines.awaitAll
7+
import kotlinx.coroutines.withContext
8+
9+
class CompositeUpdater(
10+
private val updaters: List<Updater>
11+
) : Updater {
12+
13+
constructor(vararg updaters: Updater) : this(updaters.toList())
14+
15+
override suspend fun listenForUpdates(): Unit = withContext(Dispatchers.IO) {
16+
val coroutines = updaters.map {
17+
async { it.listenForUpdates() }
18+
}
19+
20+
coroutines.awaitAll()
21+
}
22+
}

app/src/main/java/jp/co/soramitsu/app/root/domain/RootInteractor.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
package jp.co.soramitsu.app.root.domain
22

3-
import io.reactivex.Completable
3+
import jp.co.soramitsu.core_api.data.network.Updater
44
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
5-
import jp.co.soramitsu.feature_account_api.domain.model.Node
6-
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
75
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
86
import jp.co.soramitsu.feature_wallet_impl.data.buyToken.ExternalProvider
97

108
class RootInteractor(
119
private val accountRepository: AccountRepository,
12-
private val buyTokenRegistry: BuyTokenRegistry,
13-
private val walletRepository: WalletRepository
10+
private val rootUpdater: Updater,
11+
private val buyTokenRegistry: BuyTokenRegistry
1412
) {
15-
fun observeSelectedNode() = accountRepository.observeSelectedNode()
1613

17-
fun listenForAccountUpdates(networkType: Node.NetworkType): Completable = accountRepository.observeSelectedAccount()
18-
.filter { it.network.type == networkType }
19-
.distinctUntilChanged { old, new -> old.address == new.address }
20-
.switchMapCompletable(walletRepository::listenForUpdates)
14+
fun selectedNodeFlow() = accountRepository.selectedNodeFlow()
15+
16+
suspend fun listenForUpdates() {
17+
rootUpdater.listenForUpdates()
18+
}
2119

2220
fun isBuyProviderRedirectLink(link: String) = buyTokenRegistry.availableProviders
2321
.filterIsInstance<ExternalProvider>()

app/src/main/java/jp/co/soramitsu/app/root/presentation/RootActivity.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package jp.co.soramitsu.app.root.presentation
22

33
import android.content.Intent
44
import android.os.Bundle
5-
import androidx.lifecycle.Observer
65
import androidx.navigation.NavController
76
import androidx.navigation.fragment.NavHostFragment
87
import jp.co.soramitsu.app.R
@@ -88,9 +87,9 @@ class RootActivity : BaseActivity<RootViewModel>(), SplashBackgroundHolder {
8887
}
8988

9089
override fun subscribe(viewModel: RootViewModel) {
91-
viewModel.showConnectingBarLiveData.observe(this, Observer { show ->
90+
viewModel.showConnectingBarLiveData.observe(this) { show ->
9291
rootNetworkBar.setVisible(show)
93-
})
92+
}
9493

9594
viewModel.messageLiveData.observe(this, EventObserver {
9695
showToast(it)

app/src/main/java/jp/co/soramitsu/app/root/presentation/RootViewModel.kt

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package jp.co.soramitsu.app.root.presentation
22

3-
import io.reactivex.android.schedulers.AndroidSchedulers
4-
import io.reactivex.disposables.Disposable
5-
import io.reactivex.schedulers.Schedulers
3+
import androidx.lifecycle.viewModelScope
64
import jp.co.soramitsu.app.R
75
import jp.co.soramitsu.app.root.domain.RootInteractor
86
import jp.co.soramitsu.common.base.BaseViewModel
@@ -11,7 +9,16 @@ import jp.co.soramitsu.common.data.network.rpc.LifecycleCondition
119
import jp.co.soramitsu.common.mixin.api.NetworkStateMixin
1210
import jp.co.soramitsu.common.mixin.api.NetworkStateUi
1311
import jp.co.soramitsu.common.resources.ResourceManager
14-
import jp.co.soramitsu.common.utils.plusAssign
12+
import kotlinx.coroutines.CoroutineScope
13+
import kotlinx.coroutines.Dispatchers
14+
import kotlinx.coroutines.cancelChildren
15+
import kotlinx.coroutines.flow.collectLatest
16+
import kotlinx.coroutines.flow.distinctUntilChanged
17+
import kotlinx.coroutines.flow.flowOn
18+
import kotlinx.coroutines.flow.launchIn
19+
import kotlinx.coroutines.flow.onEach
20+
import kotlinx.coroutines.launch
21+
import kotlin.coroutines.EmptyCoroutineContext
1522

1623
class RootViewModel(
1724
private val interactor: RootInteractor,
@@ -20,47 +27,46 @@ class RootViewModel(
2027
private val resourceManager: ResourceManager,
2128
private val networkStateMixin: NetworkStateMixin
2229
) : BaseViewModel(), NetworkStateUi by networkStateMixin {
23-
private var socketSourceDisposable: Disposable? = null
30+
31+
private var nodeScope = CoroutineScope(EmptyCoroutineContext)
2432

2533
private var willBeClearedForLanguageChange = false
2634

2735
init {
2836
observeAllowedToConnect()
29-
30-
disposables += networkStateMixin.networkStateDisposable
3137
}
3238

3339
private fun observeAllowedToConnect() {
34-
disposables += connectionManager.observeLifecycleCondition()
40+
connectionManager.lifecycleConditionFlow()
3541
.distinctUntilChanged()
36-
.subscribe { lifecycleCondition ->
42+
.onEach { lifecycleCondition ->
3743
if (lifecycleCondition == LifecycleCondition.ALLOWED) {
3844
bindConnectionToNode()
3945
} else {
4046
unbindConnection()
4147
}
4248
}
49+
.flowOn(Dispatchers.IO)
50+
.launchIn(viewModelScope)
4351
}
4452

45-
private fun bindConnectionToNode() {
46-
socketSourceDisposable = interactor.observeSelectedNode()
47-
.subscribeOn(Schedulers.io())
53+
private fun bindConnectionToNode() = nodeScope.launch {
54+
interactor.selectedNodeFlow()
4855
.distinctUntilChanged()
49-
.doOnNext {
56+
.onEach {
5057
if (connectionManager.started()) {
5158
connectionManager.switchUrl(it.link)
5259
} else {
5360
connectionManager.start(it.link)
5461
}
55-
}.switchMapCompletable {
56-
interactor.listenForAccountUpdates(it.networkType)
62+
}.flowOn(Dispatchers.IO)
63+
.collectLatest {
64+
interactor.listenForUpdates()
5765
}
58-
.observeOn(AndroidSchedulers.mainThread())
59-
.subscribe()
6066
}
6167

6268
private fun unbindConnection() {
63-
socketSourceDisposable?.dispose()
69+
nodeScope.coroutineContext.cancelChildren()
6470

6571
connectionManager.stop()
6672
}

build.gradle

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
buildscript {
22
ext {
33
// App version
4-
versionName = '1.2.0'
5-
versionCode = 8
4+
versionName = '1.2.1'
5+
versionCode = 10
66

77
// SDK and tools
88
compileSdkVersion = 29
@@ -15,8 +15,7 @@ buildscript {
1515
cardViewVersion = '1.0.0'
1616
constraintVersion = '1.1.3'
1717

18-
rxJavaVersion = '2.2.7'
19-
rxAndroidVersion = '2.1.0'
18+
coroutinesVersion = '1.4.2'
2019

2120
biometricVersion = '1.0.1'
2221

@@ -27,7 +26,7 @@ buildscript {
2726

2827
architectureComponentVersion = '2.2.0'
2928

30-
retrofitVersion = '2.4.0'
29+
retrofitVersion = '2.9.0'
3130
okhttpVersion = '3.8.0'
3231
gsonVersion = '2.8.2'
3332

@@ -41,13 +40,12 @@ buildscript {
4140

4241
bouncyCastleVersion = '1.60'
4342

44-
fearlessLibVersion = '1.0.30'
43+
fearlessLibVersion = '1.0.48'
4544

4645
gifVersion = '1.2.19'
4746

4847
zXingVersion = '3.4.0'
4948
zXingEmbeddedVersion = '3.5.0@aar'
50-
rxPermssionVersion = '0.10.2'
5149

5250
biometricDep = "androidx.biometric:biometric:$biometricVersion"
5351

@@ -56,6 +54,8 @@ buildscript {
5654

5755
wsVersion = "2.10"
5856

57+
permissionsVersion = '1.1.2'
58+
5959
kotlinDep = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
6060

6161
androidDep = "androidx.appcompat:appcompat:$supportVersion"
@@ -64,17 +64,28 @@ buildscript {
6464
constraintDep = "androidx.constraintlayout:constraintlayout:$constraintVersion"
6565
materialDep = "com.google.android.material:material:$supportVersion"
6666

67-
rxJavaDep = "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
68-
rxAndroidDep = "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
69-
7067
daggerDep = "com.google.dagger:dagger:$daggerVersion"
7168
daggerKapt = "com.google.dagger:dagger-compiler:$daggerVersion"
7269

7370
lifecycleDep = "androidx.lifecycle:lifecycle-extensions:$architectureComponentVersion"
7471
lifecycleKapt = "androidx.lifecycle:lifecycle-compiler:$architectureComponentVersion"
7572

73+
coroutinesDep = "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion"
74+
coroutinesAndroidDep = "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion"
75+
76+
// viewModelScope
77+
viewModelKtxDep = "androidx.lifecycle:lifecycle-viewmodel-ktx:$architectureComponentVersion"
78+
79+
// liveData builder
80+
liveDataKtxDep = "androidx.lifecycle:lifecycle-livedata-ktx:$architectureComponentVersion"
81+
82+
// lifecycle scopes
83+
lifeCycleKtxDep = "androidx.lifecycle:lifecycle-runtime-ktx:$architectureComponentVersion"
84+
85+
permissionsDep = "com.github.florent37:runtime-permission-kotlin:$permissionsVersion"
86+
7687
roomDep = "androidx.room:room-runtime:$architectureComponentVersion"
77-
rxRoomDep = "androidx.room:room-rxjava2:$architectureComponentVersion"
88+
roomKtxDep = "androidx.room:room-ktx:$architectureComponentVersion"
7889
roomKapt = "androidx.room:room-compiler:$architectureComponentVersion"
7990

8091
navigationFragmentDep = "androidx.navigation:navigation-fragment-ktx:$navControllerVersion"
@@ -84,13 +95,11 @@ buildscript {
8495

8596
retrofitDep = "com.squareup.retrofit2:retrofit:$retrofitVersion"
8697
interceptorVersion = "com.squareup.okhttp3:logging-interceptor:$okhttpVersion"
87-
rxCallAdapterDep = "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
8898
gsonConvertedDep = "com.squareup.retrofit2:converter-gson:$retrofitVersion"
8999
gsonDep = "com.google.code.gson:gson:$gsonVersion"
90100

91101
zXingCoreDep = "com.google.zxing:core:$zXingVersion"
92102
zXingEmbeddedDep = "com.journeyapps:zxing-android-embedded:$zXingEmbeddedVersion"
93-
rxPermissionsDep = "com.github.tbruyelle:rxpermissions:$rxPermssionVersion"
94103

95104
fearlessLibDep = "jp.co.soramitsu.fearless-utils:fearless-utils:$fearlessLibVersion"
96105

common/build.gradle

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ android {
3838
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
3939
}
4040
}
41+
42+
kotlinOptions {
43+
freeCompilerArgs = ["-Xallow-result-return-type"]
44+
}
4145
}
4246

4347
dependencies {
@@ -57,8 +61,10 @@ dependencies {
5761

5862
implementation fearlessLibDep
5963

60-
implementation rxJavaDep
61-
implementation rxAndroidDep
64+
implementation coroutinesDep
65+
implementation liveDataKtxDep
66+
67+
implementation viewModelKtxDep
6268

6369
implementation daggerDep
6470
kapt daggerKapt
@@ -68,7 +74,6 @@ dependencies {
6874

6975
implementation retrofitDep
7076
implementation gsonConvertedDep
71-
implementation rxCallAdapterDep
7277
implementation interceptorVersion
7378

7479
implementation zXingCoreDep

0 commit comments

Comments
 (0)