Skip to content

Commit ab68bb7

Browse files
authored
Merge pull request #295 from soramitsu/rc/1.8
Rc/1.8
2 parents d4bf6f8 + b12c3b0 commit ab68bb7

File tree

297 files changed

+6105
-646
lines changed

Some content is hidden

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

297 files changed

+6105
-646
lines changed

app/build.gradle

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,21 @@ android {
5050
}
5151
}
5252

53-
android {
54-
compileOptions {
55-
sourceCompatibility 1.8
56-
targetCompatibility 1.8
53+
bundle {
54+
language {
55+
enableSplit = false
5756
}
57+
}
5858

59-
bundle {
60-
language {
61-
enableSplit = false
62-
}
63-
}
59+
compileOptions {
60+
sourceCompatibility 1.8
61+
targetCompatibility 1.8
6462
}
6563

6664
kotlinOptions {
6765
freeCompilerArgs = ["-Xallow-result-return-type"]
66+
67+
jvmTarget = '1.8'
6868
}
6969
}
7070

@@ -94,6 +94,9 @@ dependencies {
9494
implementation project(':feature-staking-api')
9595
implementation project(':feature-staking-impl')
9696

97+
implementation project(':feature-crowdloan-api')
98+
implementation project(':feature-crowdloan-impl')
99+
97100
implementation kotlinDep
98101

99102
implementation androidDep
@@ -126,6 +129,8 @@ dependencies {
126129
testImplementation project(':test-shared')
127130

128131
implementation insetterDep
132+
133+
implementation liveDataKtxDep
129134
}
130135

131136
task printVersion {

app/src/main/java/jp/co/soramitsu/app/di/app/NavigationModule.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import dagger.Provides
55
import jp.co.soramitsu.app.root.navigation.Navigator
66
import jp.co.soramitsu.common.di.scope.ApplicationScope
77
import jp.co.soramitsu.feature_account_impl.presentation.AccountRouter
8+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.CrowdloanRouter
89
import jp.co.soramitsu.feature_onboarding_impl.OnboardingRouter
910
import jp.co.soramitsu.feature_staking_impl.presentation.StakingRouter
1011
import jp.co.soramitsu.feature_wallet_impl.presentation.WalletRouter
@@ -36,4 +37,8 @@ class NavigationModule {
3637
@ApplicationScope
3738
@Provides
3839
fun provideStakingRouter(navigator: Navigator): StakingRouter = navigator
40+
41+
@ApplicationScope
42+
@Provides
43+
fun provideCrowdloanRouter(navigator: Navigator): CrowdloanRouter = navigator
3944
}

app/src/main/java/jp/co/soramitsu/app/di/deps/ComponentHolderModule.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import jp.co.soramitsu.core_db.di.DbApi
1414
import jp.co.soramitsu.core_db.di.DbHolder
1515
import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
1616
import jp.co.soramitsu.feature_account_impl.di.AccountFeatureHolder
17+
import jp.co.soramitsu.feature_crowdloan_api.di.CrowdloanFeatureApi
18+
import jp.co.soramitsu.feature_crowdloan_impl.di.CrowdloanFeatureHolder
1719
import jp.co.soramitsu.feature_onboarding_api.di.OnboardingFeatureApi
1820
import jp.co.soramitsu.feature_onboarding_impl.di.OnboardingFeatureHolder
1921
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
@@ -78,5 +80,11 @@ interface ComponentHolderModule {
7880
@Binds
7981
@ClassKey(RuntimeApi::class)
8082
@IntoMap
81-
fun provideARuntimeFeature(runtimeHolder: RuntimeHolder): FeatureApiHolder
83+
fun provideRuntimeFeature(runtimeHolder: RuntimeHolder): FeatureApiHolder
84+
85+
@ApplicationScope
86+
@Binds
87+
@ClassKey(CrowdloanFeatureApi::class)
88+
@IntoMap
89+
fun provideCrowdloanFeature(holder: CrowdloanFeatureHolder): FeatureApiHolder
8290
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import jp.co.soramitsu.common.di.CommonApi
1010
import jp.co.soramitsu.common.di.scope.FeatureScope
1111
import jp.co.soramitsu.core_db.di.DbApi
1212
import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
13+
import jp.co.soramitsu.feature_crowdloan_api.di.CrowdloanFeatureApi
1314
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
1415
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
1516
import jp.co.soramitsu.runtime.di.RuntimeApi
@@ -44,6 +45,7 @@ interface RootComponent {
4445
AccountFeatureApi::class,
4546
WalletFeatureApi::class,
4647
StakingFeatureApi::class,
48+
CrowdloanFeatureApi::class,
4749
DbApi::class,
4850
CommonApi::class,
4951
RuntimeApi::class

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,23 @@ import jp.co.soramitsu.common.data.network.AppLinksProvider
44
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
7+
import jp.co.soramitsu.common.utils.SuspendableProperty
8+
import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot
79
import jp.co.soramitsu.fearless_utils.wsrpc.SocketService
810
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
11+
import jp.co.soramitsu.feature_crowdloan_api.data.network.blockhain.updaters.CrowdloanUpdaters
12+
import jp.co.soramitsu.feature_crowdloan_api.data.repository.CrowdloanRepository
913
import jp.co.soramitsu.feature_staking_api.di.StakingUpdaters
14+
import jp.co.soramitsu.feature_staking_api.domain.api.StakingRepository
1015
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
1116
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
1217
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
1318
import jp.co.soramitsu.runtime.RuntimeUpdater
1419

1520
interface RootDependencies {
21+
22+
fun crowdloanRepository(): CrowdloanRepository
23+
1624
fun networkStateMixin(): NetworkStateMixin
1725

1826
fun connectionManager(): ConnectionManager
@@ -31,6 +39,12 @@ interface RootDependencies {
3139

3240
fun stakingUpdaters(): StakingUpdaters
3341

42+
fun crowdloanUpdaters(): CrowdloanUpdaters
43+
44+
fun runtimeProperty(): SuspendableProperty<RuntimeSnapshot>
45+
46+
fun stakingRepository(): StakingRepository
47+
3448
fun runtimeUpdater(): RuntimeUpdater
3549

3650
fun socketService(): SocketService

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import jp.co.soramitsu.common.di.FeatureContainer
66
import jp.co.soramitsu.common.di.scope.ApplicationScope
77
import jp.co.soramitsu.core_db.di.DbApi
88
import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
9+
import jp.co.soramitsu.feature_crowdloan_api.di.CrowdloanFeatureApi
910
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
1011
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
1112
import jp.co.soramitsu.runtime.di.RuntimeApi
@@ -24,6 +25,7 @@ class RootFeatureHolder @Inject constructor(
2425
.accountFeatureApi(getFeature(AccountFeatureApi::class.java))
2526
.walletFeatureApi(getFeature(WalletFeatureApi::class.java))
2627
.stakingFeatureApi(getFeature(StakingFeatureApi::class.java))
28+
.crowdloanFeatureApi(getFeature(CrowdloanFeatureApi::class.java))
2729
.runtimeApi(getFeature(RuntimeApi::class.java))
2830
.build()
2931
return DaggerRootComponent.factory()

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,14 @@ import dagger.Provides
55
import jp.co.soramitsu.app.root.domain.RootInteractor
66
import jp.co.soramitsu.app.root.domain.UpdateSystem
77
import jp.co.soramitsu.common.di.scope.FeatureScope
8+
import jp.co.soramitsu.common.utils.SuspendableProperty
9+
import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot
810
import jp.co.soramitsu.fearless_utils.wsrpc.SocketService
911
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
12+
import jp.co.soramitsu.feature_crowdloan_api.data.network.blockhain.updaters.CrowdloanUpdaters
13+
import jp.co.soramitsu.feature_crowdloan_api.data.repository.CrowdloanRepository
1014
import jp.co.soramitsu.feature_staking_api.di.StakingUpdaters
15+
import jp.co.soramitsu.feature_staking_api.domain.api.StakingRepository
1116
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
1217
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
1318
import jp.co.soramitsu.runtime.RuntimeUpdater
@@ -20,14 +25,18 @@ class RootFeatureModule {
2025
fun provideUpdateSystem(
2126
walletUpdaters: WalletUpdaters,
2227
stakingUpdaters: StakingUpdaters,
28+
crowdloanUpdaters: CrowdloanUpdaters,
2329
runtimeUpdater: RuntimeUpdater,
30+
runtimeProperty: SuspendableProperty<RuntimeSnapshot>,
2431
socketService: SocketService
2532
): UpdateSystem {
2633
return UpdateSystem(
2734
runtimeUpdater,
35+
runtimeProperty,
2836
updaters = listOf(
2937
*walletUpdaters.updaters,
3038
*stakingUpdaters.updaters,
39+
*crowdloanUpdaters.updaters,
3140
runtimeUpdater
3241
),
3342
socketService
@@ -38,9 +47,17 @@ class RootFeatureModule {
3847
@FeatureScope
3948
fun provideRootInteractor(
4049
accountRepository: AccountRepository,
50+
stakingRepository: StakingRepository,
51+
crowdloanRepository: CrowdloanRepository,
4152
updateSystem: UpdateSystem,
4253
walletRepository: WalletRepository
4354
): RootInteractor {
44-
return RootInteractor(accountRepository, updateSystem, walletRepository)
55+
return RootInteractor(
56+
accountRepository,
57+
updateSystem,
58+
stakingRepository,
59+
crowdloanRepository,
60+
walletRepository
61+
)
4562
}
4663
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@ package jp.co.soramitsu.app.root.domain
22

33
import jp.co.soramitsu.core.updater.Updater
44
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
5+
import jp.co.soramitsu.feature_crowdloan_api.data.repository.CrowdloanRepository
6+
import jp.co.soramitsu.feature_staking_api.domain.api.StakingRepository
57
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
68
import jp.co.soramitsu.feature_wallet_impl.data.buyToken.ExternalProvider
79
import kotlinx.coroutines.flow.Flow
810

911
class RootInteractor(
1012
private val accountRepository: AccountRepository,
1113
private val updateSystem: UpdateSystem,
14+
private val stakingRepository: StakingRepository,
15+
private val crowdloanRepository: CrowdloanRepository,
1216
private val walletRepository: WalletRepository,
1317
) {
1418

@@ -20,6 +24,10 @@ class RootInteractor(
2024

2125
fun isBuyProviderRedirectLink(link: String) = ExternalProvider.REDIRECT_URL_BASE in link
2226

27+
fun stakingAvailableFlow() = stakingRepository.stakingAvailableFlow()
28+
29+
fun crowdloanAvailableFlow() = crowdloanRepository.crowdloanAvailableFlow()
30+
2331
suspend fun updatePhishingAddresses() {
2432
runCatching {
2533
walletRepository.updatePhishingAddresses()

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package jp.co.soramitsu.app.root.domain
22

33
import jp.co.soramitsu.common.data.network.StorageSubscriptionBuilder
4+
import jp.co.soramitsu.common.utils.SuspendableProperty
5+
import jp.co.soramitsu.common.utils.hasModule
46
import jp.co.soramitsu.core.updater.Updater
7+
import jp.co.soramitsu.fearless_utils.runtime.RuntimeSnapshot
58
import jp.co.soramitsu.fearless_utils.wsrpc.SocketService
69
import jp.co.soramitsu.fearless_utils.wsrpc.request.runtime.storage.subscribeUsing
710
import jp.co.soramitsu.runtime.RuntimeUpdater
811
import kotlinx.coroutines.Dispatchers
912
import kotlinx.coroutines.flow.Flow
13+
import kotlinx.coroutines.flow.emptyFlow
1014
import kotlinx.coroutines.flow.flatMapLatest
1115
import kotlinx.coroutines.flow.flowOn
1216
import kotlinx.coroutines.flow.merge
@@ -15,6 +19,7 @@ import kotlinx.coroutines.withContext
1519

1620
class UpdateSystem(
1721
private val runtimeUpdater: RuntimeUpdater,
22+
private val runtimeProperty: SuspendableProperty<RuntimeSnapshot>,
1823
private val updaters: List<Updater>,
1924
private val socketService: SocketService
2025
) {
@@ -24,13 +29,21 @@ class UpdateSystem(
2429

2530
val scopeFlows = updaters.groupBy(Updater::scope).map { (scope, scopeUpdaters) ->
2631
scope.invalidationFlow().flatMapLatest {
32+
val runtimeMetadata = runtimeProperty.get().metadata
33+
2734
val subscriptionBuilder = StorageSubscriptionBuilder.create()
2835

29-
val updatersFlow = scopeUpdaters.map { it.listenForUpdates(subscriptionBuilder).flowOn(Dispatchers.IO) }
36+
val updatersFlow = scopeUpdaters
37+
.filter { it.requiredModules.all(runtimeMetadata::hasModule) }
38+
.map { it.listenForUpdates(subscriptionBuilder).flowOn(Dispatchers.IO) }
3039

31-
val cancellable = socketService.subscribeUsing(subscriptionBuilder.proxy.build())
40+
if (updatersFlow.isNotEmpty()) {
41+
val cancellable = socketService.subscribeUsing(subscriptionBuilder.proxy.build())
3242

33-
updatersFlow.merge().onCompletion { cancellable.cancel() }
43+
updatersFlow.merge().onCompletion { cancellable.cancel() }
44+
} else {
45+
emptyFlow()
46+
}
3447
}
3548
}
3649

app/src/main/java/jp/co/soramitsu/app/root/navigation/Navigator.kt

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ import jp.co.soramitsu.feature_account_impl.presentation.node.details.NodeDetail
2727
import jp.co.soramitsu.feature_account_impl.presentation.pincode.PinCodeAction
2828
import jp.co.soramitsu.feature_account_impl.presentation.pincode.PincodeFragment
2929
import jp.co.soramitsu.feature_account_impl.presentation.pincode.ToolbarConfiguration
30+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.CrowdloanRouter
31+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.confirm.ConfirmContributeFragment
32+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.confirm.parcel.ConfirmContributePayload
33+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.select.CrowdloanContributeFragment
34+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.select.parcel.ContributePayload
3035
import jp.co.soramitsu.feature_onboarding_impl.OnboardingRouter
3136
import jp.co.soramitsu.feature_onboarding_impl.presentation.welcome.WelcomeFragment
3237
import jp.co.soramitsu.feature_staking_impl.presentation.StakingRouter
@@ -41,6 +46,8 @@ import jp.co.soramitsu.feature_staking_impl.presentation.staking.controller.conf
4146
import jp.co.soramitsu.feature_staking_impl.presentation.staking.main.model.StakingStoryModel
4247
import jp.co.soramitsu.feature_staking_impl.presentation.staking.rebond.confirm.ConfirmRebondFragment
4348
import jp.co.soramitsu.feature_staking_impl.presentation.staking.rebond.confirm.ConfirmRebondPayload
49+
import jp.co.soramitsu.feature_staking_impl.presentation.staking.rewardDestination.confirm.ConfirmRewardDestinationFragment
50+
import jp.co.soramitsu.feature_staking_impl.presentation.staking.rewardDestination.confirm.parcel.ConfirmRewardDestinationPayload
4451
import jp.co.soramitsu.feature_staking_impl.presentation.staking.unbond.confirm.ConfirmUnbondFragment
4552
import jp.co.soramitsu.feature_staking_impl.presentation.staking.unbond.confirm.ConfirmUnbondPayload
4653
import jp.co.soramitsu.feature_staking_impl.presentation.story.StoryFragment
@@ -66,7 +73,8 @@ class Navigator :
6673
AccountRouter,
6774
WalletRouter,
6875
RootRouter,
69-
StakingRouter {
76+
StakingRouter,
77+
CrowdloanRouter {
7078

7179
private var navController: NavController? = null
7280
private var activity: AppCompatActivity? = null
@@ -213,6 +221,14 @@ class Navigator :
213221
navController?.navigate(R.id.action_open_confirm_rebond, ConfirmRebondFragment.getBundle(payload))
214222
}
215223

224+
override fun openContribute(payload: ContributePayload) {
225+
navController?.navigate(R.id.action_mainFragment_to_crowdloanContributeFragment, CrowdloanContributeFragment.getBundle(payload))
226+
}
227+
228+
override fun openConfirmContribute(payload: ConfirmContributePayload) {
229+
navController?.navigate(R.id.action_crowdloanContributeFragment_to_confirmContributeFragment, ConfirmContributeFragment.getBundle(payload))
230+
}
231+
216232
override fun back() {
217233
val popped = navController!!.popBackStack()
218234

@@ -233,6 +249,17 @@ class Navigator :
233249
navController?.navigate(R.id.action_confirmStakingFragment_back_to_currentValidatorsFragment)
234250
}
235251

252+
override fun openChangeRewardDestination() {
253+
navController?.navigate(R.id.action_mainFragment_to_selectRewardDestinationFragment)
254+
}
255+
256+
override fun openConfirmRewardDestination(payload: ConfirmRewardDestinationPayload) {
257+
navController?.navigate(
258+
R.id.action_selectRewardDestinationFragment_to_confirmRewardDestinationFragment,
259+
ConfirmRewardDestinationFragment.getBundle(payload)
260+
)
261+
}
262+
236263
override fun openControllerAccount() {
237264
navController?.navigate(R.id.action_stakingBalanceFragment_to_setControllerAccountFragment)
238265
}
@@ -406,7 +433,7 @@ class Navigator :
406433
override fun withPinCodeCheckRequired(
407434
delayedNavigation: DelayedNavigation,
408435
createMode: Boolean,
409-
pinCodeTitleRes: Int?
436+
pinCodeTitleRes: Int?,
410437
) {
411438
val action = if (createMode) {
412439
PinCodeAction.Create(delayedNavigation)

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ class MainFragment : BaseFragment<MainViewModel>() {
8383
}
8484

8585
override fun subscribe(viewModel: MainViewModel) {
86+
viewModel.stakingAvailableLiveData.observe {
87+
bottomNavigationView.menu.findItem(R.id.stakingFragment).isVisible = it
88+
}
89+
90+
viewModel.crowdloanAvailableLiveData.observe {
91+
bottomNavigationView.menu.findItem(R.id.crowdloanFragment).isVisible = it
92+
}
8693
}
8794

8895
private fun isAtHomeTab(destination: NavDestination) =

0 commit comments

Comments
 (0)