Skip to content

Commit d4bf6f8

Browse files
authored
Merge pull request #273 from soramitsu/rc/1.7.0
Rc/1.7.0
2 parents 4482cc8 + 1c72e16 commit d4bf6f8

File tree

1,012 files changed

+37641
-2932
lines changed

Some content is hidden

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

1,012 files changed

+37641
-2932
lines changed

.editorconfig

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# http://editorconfig.org
2+
root = true
3+
4+
[{*.kt, *.kts}]
5+
#Ktlint configuration
6+
max_line_length = 160
7+
insert_final_newline = true
8+
indent_size = 4
9+
disabled_rules = import-ordering

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ app/*.apk
1010
/.idea/
1111

1212
# ignore jacoco coverage reports
13-
/coverage
13+
/coverage
14+
15+
fearless.jks

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,22 @@ Fearless Wallet is a mobile wallet designed for the decentralized future on the
88

99
[![](https://img.shields.io/twitter/follow/FearlessWallet?label=Follow&style=social)](https://twitter.com/FearlessWallet)
1010

11-
1211
## Roadmap
1312
Fearless Wallet roadmap is available for everyone: [roadmap link](https://soramitsucoltd.aha.io/shared/97bc3006ee3c1baa0598863615cf8d14)
1413

1514
## Dev Status
1615
Track features development: [board link](https://soramitsucoltd.aha.io/shared/343e5db57d53398e3f26d0048158c4a2)
1716

17+
## How to build
18+
19+
To build Fearless Wallet Android project, you need to provide several keys either in enviroment variables or in `local.properties` file:
20+
21+
``` properties
22+
MOONPAY_TEST_SECRET=stub
23+
MOONPAY_PRODUCTION_SECRET=stub
24+
```
25+
26+
Note, that with stub keys buy via moonpay will not work correctly. However, other parts of application will not be affected.
27+
1828
## License
1929
Fearless Wallet Android is available under the Apache 2.0 license. See the LICENSE file for more info.

app/build.gradle

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ android {
6262
}
6363
}
6464
}
65+
66+
kotlinOptions {
67+
freeCompilerArgs = ["-Xallow-result-return-type"]
68+
}
6569
}
6670

6771
play {
@@ -85,6 +89,11 @@ dependencies {
8589
implementation project(':feature-wallet-api')
8690
implementation project(':feature-wallet-impl')
8791

92+
implementation project(':runtime')
93+
94+
implementation project(':feature-staking-api')
95+
implementation project(':feature-staking-impl')
96+
8897
implementation kotlinDep
8998

9099
implementation androidDep
@@ -113,6 +122,10 @@ dependencies {
113122
compileOnly wsDep
114123

115124
implementation coroutinesDep
125+
126+
testImplementation project(':test-shared')
127+
128+
implementation insetterDep
116129
}
117130

118131
task printVersion {

app/src/main/java/jp/co/soramitsu/app/App.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,4 @@ open class App : Application(), FeatureContainer {
5555
override fun commonApi(): CommonApi {
5656
return appComponent
5757
}
58-
}
58+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,4 @@ interface AppComponent : CommonApi {
3636
}
3737

3838
fun inject(app: App)
39-
}
39+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ class AppModule {
1414
fun provideContext(application: App): Context {
1515
return application
1616
}
17-
}
17+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ class FeatureManagerModule {
1414
fun provideFeatureHolderManager(featureApiHolderMap: @JvmSuppressWildcards Map<Class<*>, FeatureApiHolder>): FeatureHolderManager {
1515
return FeatureHolderManager(featureApiHolderMap)
1616
}
17-
}
17+
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ 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
88
import jp.co.soramitsu.feature_onboarding_impl.OnboardingRouter
9+
import jp.co.soramitsu.feature_staking_impl.presentation.StakingRouter
910
import jp.co.soramitsu.feature_wallet_impl.presentation.WalletRouter
1011
import jp.co.soramitsu.splash.SplashRouter
1112

@@ -31,4 +32,8 @@ class NavigationModule {
3132
@ApplicationScope
3233
@Provides
3334
fun provideWalletRouter(navigator: Navigator): WalletRouter = navigator
34-
}
35+
36+
@ApplicationScope
37+
@Provides
38+
fun provideStakingRouter(navigator: Navigator): StakingRouter = navigator
39+
}

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

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
1616
import jp.co.soramitsu.feature_account_impl.di.AccountFeatureHolder
1717
import jp.co.soramitsu.feature_onboarding_api.di.OnboardingFeatureApi
1818
import jp.co.soramitsu.feature_onboarding_impl.di.OnboardingFeatureHolder
19+
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
20+
import jp.co.soramitsu.feature_staking_impl.di.StakingFeatureHolder
1921
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
2022
import jp.co.soramitsu.feature_wallet_impl.di.WalletFeatureHolder
23+
import jp.co.soramitsu.runtime.di.RuntimeApi
24+
import jp.co.soramitsu.runtime.di.RuntimeHolder
2125
import jp.co.soramitsu.splash.di.SplashFeatureApi
2226
import jp.co.soramitsu.splash.di.SplashFeatureHolder
2327

@@ -63,4 +67,16 @@ interface ComponentHolderModule {
6367
@ClassKey(RootApi::class)
6468
@IntoMap
6569
fun provideMainFeature(accountFeatureHolder: RootFeatureHolder): FeatureApiHolder
66-
}
70+
71+
@ApplicationScope
72+
@Binds
73+
@ClassKey(StakingFeatureApi::class)
74+
@IntoMap
75+
fun provideStakingFeature(holder: StakingFeatureHolder): FeatureApiHolder
76+
77+
@ApplicationScope
78+
@Binds
79+
@ClassKey(RuntimeApi::class)
80+
@IntoMap
81+
fun provideARuntimeFeature(runtimeHolder: RuntimeHolder): FeatureApiHolder
82+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ class FeatureHolderManager(
1515
val featureApiHolder = mFeatureHolders[key] ?: throw IllegalStateException()
1616
featureApiHolder.releaseFeatureApi()
1717
}
18-
}
18+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package jp.co.soramitsu.app.root.di
22

3-
interface RootApi
3+
interface RootApi

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,11 @@ import jp.co.soramitsu.app.root.presentation.main.coming_soon.di.ComingSoonCompo
88
import jp.co.soramitsu.app.root.presentation.main.di.MainFragmentComponent
99
import jp.co.soramitsu.common.di.CommonApi
1010
import jp.co.soramitsu.common.di.scope.FeatureScope
11+
import jp.co.soramitsu.core_db.di.DbApi
1112
import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
13+
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
1214
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
15+
import jp.co.soramitsu.runtime.di.RuntimeApi
1316

1417
@Component(
1518
dependencies = [
@@ -40,8 +43,11 @@ interface RootComponent {
4043
dependencies = [
4144
AccountFeatureApi::class,
4245
WalletFeatureApi::class,
43-
CommonApi::class
46+
StakingFeatureApi::class,
47+
DbApi::class,
48+
CommonApi::class,
49+
RuntimeApi::class
4450
]
4551
)
4652
interface RootFeatureDependenciesComponent : RootDependencies
47-
}
53+
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ 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.fearless_utils.wsrpc.SocketService
78
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
9+
import jp.co.soramitsu.feature_staking_api.di.StakingUpdaters
810
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
911
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
1012
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
13+
import jp.co.soramitsu.runtime.RuntimeUpdater
1114

1215
interface RootDependencies {
1316
fun networkStateMixin(): NetworkStateMixin
@@ -25,4 +28,10 @@ interface RootDependencies {
2528
fun resourceManager(): ResourceManager
2629

2730
fun walletUpdaters(): WalletUpdaters
28-
}
31+
32+
fun stakingUpdaters(): StakingUpdaters
33+
34+
fun runtimeUpdater(): RuntimeUpdater
35+
36+
fun socketService(): SocketService
37+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@ import jp.co.soramitsu.app.root.navigation.Navigator
44
import jp.co.soramitsu.common.di.FeatureApiHolder
55
import jp.co.soramitsu.common.di.FeatureContainer
66
import jp.co.soramitsu.common.di.scope.ApplicationScope
7+
import jp.co.soramitsu.core_db.di.DbApi
78
import jp.co.soramitsu.feature_account_api.di.AccountFeatureApi
9+
import jp.co.soramitsu.feature_staking_api.di.StakingFeatureApi
810
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
11+
import jp.co.soramitsu.runtime.di.RuntimeApi
912
import javax.inject.Inject
1013

1114
@ApplicationScope
@@ -17,10 +20,13 @@ class RootFeatureHolder @Inject constructor(
1720
override fun initializeDependencies(): Any {
1821
val rootFeatureDependencies = DaggerRootComponent_RootFeatureDependenciesComponent.builder()
1922
.commonApi(commonApi())
23+
.dbApi(getFeature(DbApi::class.java))
2024
.accountFeatureApi(getFeature(AccountFeatureApi::class.java))
2125
.walletFeatureApi(getFeature(WalletFeatureApi::class.java))
26+
.stakingFeatureApi(getFeature(StakingFeatureApi::class.java))
27+
.runtimeApi(getFeature(RuntimeApi::class.java))
2228
.build()
2329
return DaggerRootComponent.factory()
2430
.create(navigator, rootFeatureDependencies)
2531
}
26-
}
32+
}

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

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,45 @@ 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
65
import jp.co.soramitsu.app.root.domain.RootInteractor
6+
import jp.co.soramitsu.app.root.domain.UpdateSystem
77
import jp.co.soramitsu.common.di.scope.FeatureScope
8-
import jp.co.soramitsu.core_api.data.network.Updater
8+
import jp.co.soramitsu.fearless_utils.wsrpc.SocketService
99
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
10+
import jp.co.soramitsu.feature_staking_api.di.StakingUpdaters
1011
import jp.co.soramitsu.feature_wallet_api.di.WalletUpdaters
11-
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
12+
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
13+
import jp.co.soramitsu.runtime.RuntimeUpdater
1214

1315
@Module
1416
class RootFeatureModule {
1517

1618
@Provides
1719
@FeatureScope
18-
fun provideRootUpdater(
19-
walletUpdaters: WalletUpdaters
20-
): Updater {
21-
return CompositeUpdater(walletUpdaters.updaters)
20+
fun provideUpdateSystem(
21+
walletUpdaters: WalletUpdaters,
22+
stakingUpdaters: StakingUpdaters,
23+
runtimeUpdater: RuntimeUpdater,
24+
socketService: SocketService
25+
): UpdateSystem {
26+
return UpdateSystem(
27+
runtimeUpdater,
28+
updaters = listOf(
29+
*walletUpdaters.updaters,
30+
*stakingUpdaters.updaters,
31+
runtimeUpdater
32+
),
33+
socketService
34+
)
2235
}
2336

2437
@Provides
2538
@FeatureScope
2639
fun provideRootInteractor(
2740
accountRepository: AccountRepository,
28-
rootUpdater: Updater,
29-
buyTokenRegistry: BuyTokenRegistry
41+
updateSystem: UpdateSystem,
42+
walletRepository: WalletRepository
3043
): RootInteractor {
31-
return RootInteractor(accountRepository, rootUpdater, buyTokenRegistry)
44+
return RootInteractor(accountRepository, updateSystem, walletRepository)
3245
}
33-
}
46+
}

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

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,28 @@
11
package jp.co.soramitsu.app.root.domain
22

3-
import jp.co.soramitsu.core_api.data.network.Updater
3+
import jp.co.soramitsu.core.updater.Updater
44
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
5-
import jp.co.soramitsu.feature_wallet_api.domain.model.BuyTokenRegistry
5+
import jp.co.soramitsu.feature_wallet_api.domain.interfaces.WalletRepository
66
import jp.co.soramitsu.feature_wallet_impl.data.buyToken.ExternalProvider
7+
import kotlinx.coroutines.flow.Flow
78

89
class RootInteractor(
910
private val accountRepository: AccountRepository,
10-
private val rootUpdater: Updater,
11-
private val buyTokenRegistry: BuyTokenRegistry
11+
private val updateSystem: UpdateSystem,
12+
private val walletRepository: WalletRepository,
1213
) {
1314

1415
fun selectedNodeFlow() = accountRepository.selectedNodeFlow()
1516

16-
suspend fun listenForUpdates() {
17-
rootUpdater.listenForUpdates()
17+
suspend fun listenForUpdates(): Flow<Updater.SideEffect> {
18+
return updateSystem.start()
1819
}
1920

20-
fun isBuyProviderRedirectLink(link: String) = buyTokenRegistry.availableProviders
21-
.filterIsInstance<ExternalProvider>()
22-
.any { it.redirectLink == link }
23-
}
21+
fun isBuyProviderRedirectLink(link: String) = ExternalProvider.REDIRECT_URL_BASE in link
22+
23+
suspend fun updatePhishingAddresses() {
24+
runCatching {
25+
walletRepository.updatePhishingAddresses()
26+
}
27+
}
28+
}

0 commit comments

Comments
 (0)