Skip to content

Commit c33bf77

Browse files
authored
Merge pull request #311 from soramitsu/rc/1.8.2
Rc/1.8.2
2 parents 0d36e00 + 0697c7d commit c33bf77

File tree

50 files changed

+732
-329
lines changed

Some content is hidden

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

50 files changed

+732
-329
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import jp.co.soramitsu.feature_staking_impl.presentation.payouts.detail.PayoutDe
4545
import jp.co.soramitsu.feature_staking_impl.presentation.payouts.model.PendingPayoutParcelable
4646
import jp.co.soramitsu.feature_staking_impl.presentation.staking.bond.confirm.ConfirmBondMoreFragment
4747
import jp.co.soramitsu.feature_staking_impl.presentation.staking.bond.confirm.ConfirmBondMorePayload
48+
import jp.co.soramitsu.feature_staking_impl.presentation.staking.bond.select.SelectBondMoreFragment
49+
import jp.co.soramitsu.feature_staking_impl.presentation.staking.bond.select.SelectBondMorePayload
4850
import jp.co.soramitsu.feature_staking_impl.presentation.staking.controller.confirm.ConfirmSetControllerFragment
4951
import jp.co.soramitsu.feature_staking_impl.presentation.staking.controller.confirm.ConfirmSetControllerPayload
5052
import jp.co.soramitsu.feature_staking_impl.presentation.staking.main.model.StakingStoryModel
@@ -200,8 +202,8 @@ class Navigator :
200202
navController?.navigate(R.id.action_mainFragment_to_stakingBalanceFragment)
201203
}
202204

203-
override fun openBondMore() {
204-
navController?.navigate(R.id.action_stakingBalanceFragment_to_selectBondMoreFragment)
205+
override fun openBondMore(payload: SelectBondMorePayload) {
206+
navController?.navigate(R.id.action_open_selectBondMoreFragment, SelectBondMoreFragment.getBundle(payload))
205207
}
206208

207209
override fun openConfirmBondMore(payload: ConfirmBondMorePayload) {

app/src/main/res/navigation/main_nav_graph.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -536,13 +536,6 @@
536536
android:label="StakingBalanceFragment"
537537
tools:layout="@layout/fragment_staking_balance">
538538

539-
<action
540-
android:id="@+id/action_stakingBalanceFragment_to_selectBondMoreFragment"
541-
app:destination="@id/selectBondMoreFragment"
542-
app:enterAnim="@anim/fragment_open_enter"
543-
app:exitAnim="@anim/fragment_open_exit"
544-
app:popEnterAnim="@anim/fragment_close_enter"
545-
app:popExitAnim="@anim/fragment_close_exit" />
546539
<action
547540
android:id="@+id/action_stakingBalanceFragment_to_selectUnbondFragment"
548541
app:destination="@id/selectUnbondFragment"
@@ -551,7 +544,6 @@
551544
app:popEnterAnim="@anim/fragment_close_enter"
552545
app:popExitAnim="@anim/fragment_close_exit" />
553546

554-
555547
<action
556548
android:id="@+id/action_stakingBalanceFragment_to_customRebondFragment"
557549
app:destination="@id/customRebondFragment"
@@ -606,6 +598,14 @@
606598
app:popExitAnim="@anim/fragment_close_exit" />
607599
</fragment>
608600

601+
<action
602+
android:id="@+id/action_open_selectBondMoreFragment"
603+
app:destination="@id/selectBondMoreFragment"
604+
app:enterAnim="@anim/fragment_open_enter"
605+
app:exitAnim="@anim/fragment_open_exit"
606+
app:popEnterAnim="@anim/fragment_close_enter"
607+
app:popExitAnim="@anim/fragment_close_exit" />
608+
609609
<fragment
610610
android:id="@+id/confirmBondMoreFragment"
611611
android:name="jp.co.soramitsu.feature_staking_impl.presentation.staking.bond.confirm.ConfirmBondMoreFragment"

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
buildscript {
22
ext {
33
// App version
4-
versionName = '1.8.1'
5-
versionCode = 15
4+
versionName = '1.8.2'
5+
versionCode = 17
66

77
// SDK and tools
88
compileSdkVersion = 29
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package jp.co.soramitsu.common.navigation
2+
3+
typealias PendingNavigationAction<ROUTER> = (ROUTER) -> Unit

common/src/main/java/jp/co/soramitsu/common/utils/formatting/CompoundNumberFormatter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class CompoundNumberFormatter(
2222
}
2323

2424
override fun format(number: BigDecimal): String {
25-
val lastAbbreviationMatching = abbreviations.lastOrNull { number > it.threshold } ?: abbreviations.first()
25+
val lastAbbreviationMatching = abbreviations.lastOrNull { number >= it.threshold } ?: abbreviations.first()
2626

2727
val scaled = number.divide(lastAbbreviationMatching.divisor, MathContext.UNLIMITED)
2828

common/src/main/res/values/strings.xml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<resources>
3+
<string name="staking_alert_bond_more_title">Bond more tokens.</string>
4+
<string name="staking_alert_bond_more_message">Staking is inactive. Current minimal stake is %s</string>
35
<string name="staking_alert_redeem_title">Redeem unbonded tokens.</string>
46

57
<string name="staking_alert_title">Alerts</string>
68
<string name="staking_alert_no_alerts_now">Everything is fine now. Alerts will appear here.</string>
7-
<string name="staking_alert_start_next_era">Your staking will start in the next era.</string>
8-
<string name="staking_alert_start_next_era_extra_message">Please wait for the next era to start.</string>
9+
<string name="staking_alert_start_next_era_message">Please wait for the next era to start.</string>
910
<string name="staking_alert_election">Staking actions are currently unavailable.</string>
10-
<string name="staking_alert_start_election_extra_message">The network is electing validators. Usually it takes less than 10 minutes.</string>
11+
<string name="staking_alert_election_message">The network is electing validators.\nUsually it takes less than 10 minutes.</string>
1112
<string name="staking_alert_change_validators">Change your validators.</string>
12-
<string name="staking_alert_change_validators_extra_message">Staking was inactive. None of your validators were elected by network.</string>
13+
<string name="staking_alert_change_validators_message">Staking is inactive. None of your validators were elected by network.</string>
1314

1415
<string name="crodloan_private_crowdloan_title">Private crowdloan</string>
1516
<string name="crodloan_private_crowdloan_message">Private crowdloans are not yet supported.</string>

common/src/test/java/jp/co/soramitsu/common/utils/formatting/CompoundNumberFormatterTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class CompoundNumberFormatterTest {
1414
testFormatter(formatter, "0.315", "0.315000041811")
1515
testFormatter(formatter, "0.99999", "0.99999999999")
1616
testFormatter(formatter, "999.99999", "999.99999999")
17+
testFormatter(formatter, "1M", "1000000")
1718
testFormatter(formatter, "888,888.12", "888888.1234")
1819
testFormatter(formatter, "1.24M", "1243000")
1920
testFormatter(formatter, "1.24M", "1243011")

core-api/src/main/java/jp/co/soramitsu/core/model/Node.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22

33
package jp.co.soramitsu.core.model
44

5-
const val REAL_ROCOCO_ADDRESS_BYTE = 42.toByte()
6-
75
data class Node(
86
val id: Int,
97
val name: String,

feature-crowdloan-api/src/test/java/jp/co/soramitsu/feature_crowdloan_api/ExampleUnitTest.kt

Lines changed: 0 additions & 17 deletions
This file was deleted.

feature-crowdloan-impl/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ android {
1414
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1515

1616
buildConfigField "String", "KARURA_FEALRESS_REFERRAL", "\"0x9642d0db9f3b301b44df74b63b0b930011e3f52154c5ca24b4dc67b3c7322f15\""
17+
buildConfigField "String", "BIFROST_FEALRESS_REFERRAL", "\"FRLS69\""
18+
buildConfigField "String", "BIFROST_TERMS_LINKS", "\"https://docs.google.com/document/d/1PDpgHnIcAmaa7dEFusmLYgjlvAbk2VKtMd755bdEsf4\""
1719
}
1820

1921
buildTypes {

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/data/network/blockhain/extrinsic/ExtrinsicBuilderExt.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,14 @@ fun ExtrinsicBuilder.contribute(parachainId: ParaId, contribution: BigInteger):
1515
)
1616
)
1717
}
18+
19+
fun ExtrinsicBuilder.addMemo(parachainId: ParaId, memo: String): ExtrinsicBuilder {
20+
return call(
21+
moduleName = "Crowdloan",
22+
callName = "add_memo",
23+
arguments = mapOf(
24+
"index" to parachainId,
25+
"memo" to memo.toByteArray()
26+
)
27+
)
28+
}

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/di/CrowdloanFeatureComponent.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import jp.co.soramitsu.feature_crowdloan_impl.di.validations.CrowdloansValidatio
1111
import jp.co.soramitsu.feature_crowdloan_impl.presentation.CrowdloanRouter
1212
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.confirm.di.ConfirmContributeComponent
1313
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.di.CustomContributeComponent
14-
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.karura.KaruraContributeView
14+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.referral.ReferralContributeView
1515
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.select.di.CrowdloanContributeComponent
1616
import jp.co.soramitsu.feature_crowdloan_impl.presentation.main.di.CrowdloanComponent
1717
import jp.co.soramitsu.feature_wallet_api.di.WalletFeatureApi
@@ -38,7 +38,7 @@ interface CrowdloanFeatureComponent : CrowdloanFeatureApi {
3838

3939
fun customContributeFactory(): CustomContributeComponent.Factory
4040

41-
fun inject(view: KaruraContributeView)
41+
fun inject(view: ReferralContributeView)
4242

4343
@Component.Factory
4444
interface Factory {

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/di/customCrowdloan/CustomContributeModule.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ package jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan
33
import dagger.Module
44
import dagger.Provides
55
import jp.co.soramitsu.common.di.scope.FeatureScope
6+
import jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.bifrost.BifrostContributionModule
67
import jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.karura.KaruraContributionModule
78

89
@Module(
910
includes = [
10-
KaruraContributionModule::class
11+
KaruraContributionModule::class,
12+
BifrostContributionModule::class
1113
]
1214
)
1315
class CustomContributeModule {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.bifrost
2+
3+
import android.content.Context
4+
import jp.co.soramitsu.common.resources.ResourceManager
5+
import jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.CustomContributeFactory
6+
import jp.co.soramitsu.feature_crowdloan_impl.domain.contribute.custom.bifrost.BifrostContributeInteractor
7+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.bifrost.BifrostContributeSubmitter
8+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.bifrost.BifrostContributeViewState
9+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.model.CustomContributePayload
10+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.referral.ReferralContributeView
11+
import kotlinx.coroutines.CoroutineScope
12+
13+
class BifrostContributeFactory(
14+
override val submitter: BifrostContributeSubmitter,
15+
private val interactor: BifrostContributeInteractor,
16+
private val resourceManager: ResourceManager,
17+
private val termsLink: String
18+
) : CustomContributeFactory {
19+
20+
override val flowType = "Bifrost"
21+
22+
override fun createViewState(scope: CoroutineScope, payload: CustomContributePayload): BifrostContributeViewState {
23+
return BifrostContributeViewState(interactor, payload, resourceManager, termsLink)
24+
}
25+
26+
override fun createView(context: Context) = ReferralContributeView(context)
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.bifrost
2+
3+
import dagger.Module
4+
import dagger.Provides
5+
import dagger.multibindings.IntoSet
6+
import jp.co.soramitsu.common.di.scope.FeatureScope
7+
import jp.co.soramitsu.common.resources.ResourceManager
8+
import jp.co.soramitsu.feature_crowdloan_impl.BuildConfig
9+
import jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.CustomContributeFactory
10+
import jp.co.soramitsu.feature_crowdloan_impl.domain.contribute.custom.bifrost.BifrostContributeInteractor
11+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.bifrost.BifrostContributeSubmitter
12+
13+
@Module
14+
class BifrostContributionModule {
15+
16+
@Provides
17+
@FeatureScope
18+
fun provideBifrostInteractor() = BifrostContributeInteractor(BuildConfig.BIFROST_FEALRESS_REFERRAL)
19+
20+
@Provides
21+
@FeatureScope
22+
fun provideBifrostSubmitter(
23+
interactor: BifrostContributeInteractor
24+
) = BifrostContributeSubmitter(interactor)
25+
26+
@Provides
27+
@FeatureScope
28+
@IntoSet
29+
fun provideBifrostFactory(
30+
submitter: BifrostContributeSubmitter,
31+
karuraInteractor: BifrostContributeInteractor,
32+
resourceManager: ResourceManager
33+
): CustomContributeFactory = BifrostContributeFactory(
34+
submitter,
35+
karuraInteractor,
36+
resourceManager,
37+
BuildConfig.BIFROST_TERMS_LINKS
38+
)
39+
}

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/di/customCrowdloan/karura/KaruraContributeFactory.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import jp.co.soramitsu.feature_crowdloan_impl.di.customCrowdloan.CustomContribut
66
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.CustomContributeViewState
77
import jp.co.soramitsu.feature_crowdloan_impl.domain.contribute.custom.karura.KaruraContributeInteractor
88
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.karura.KaruraContributeSubmitter
9-
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.karura.KaruraContributeView
109
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.karura.KaruraContributeViewState
1110
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.model.CustomContributePayload
11+
import jp.co.soramitsu.feature_crowdloan_impl.presentation.contribute.custom.referral.ReferralContributeView
1212
import kotlinx.coroutines.CoroutineScope
1313

1414
class KaruraContributeFactory(
@@ -23,5 +23,5 @@ class KaruraContributeFactory(
2323
return KaruraContributeViewState(interactor, payload, resourceManager)
2424
}
2525

26-
override fun createView(context: Context) = KaruraContributeView(context)
26+
override fun createView(context: Context) = ReferralContributeView(context)
2727
}

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/domain/contribute/CrowdloanContributeInteractor.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package jp.co.soramitsu.feature_crowdloan_impl.domain.contribute
22

3+
import jp.co.soramitsu.fearless_utils.runtime.extrinsic.ExtrinsicBuilder
34
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
45
import jp.co.soramitsu.feature_crowdloan_api.data.network.blockhain.binding.ParaId
56
import jp.co.soramitsu.feature_crowdloan_api.data.repository.CrowdloanRepository
@@ -19,6 +20,8 @@ import kotlinx.coroutines.flow.flatMapLatest
1920
import kotlinx.coroutines.withContext
2021
import java.math.BigDecimal
2122

23+
typealias AdditionalOnChainSubmission = suspend ExtrinsicBuilder.() -> Unit
24+
2225
class CrowdloanContributeInteractor(
2326
private val extrinsicService: ExtrinsicService,
2427
private val feeEstimator: FeeEstimator,
@@ -52,12 +55,15 @@ class CrowdloanContributeInteractor(
5255
suspend fun estimateFee(
5356
parachainId: ParaId,
5457
contribution: BigDecimal,
55-
token: Token
58+
token: Token,
59+
additional: AdditionalOnChainSubmission?
5660
) = withContext(Dispatchers.Default) {
5761
val contributionInPlanks = token.planksFromAmount(contribution)
5862

5963
val feeInPlanks = feeEstimator.estimateFee(accountRepository.getSelectedAccount().address) {
6064
contribute(parachainId, contributionInPlanks)
65+
66+
additional?.invoke(this)
6167
}
6268

6369
token.amountFromPlanks(feeInPlanks)
@@ -67,12 +73,15 @@ class CrowdloanContributeInteractor(
6773
originAddress: String,
6874
parachainId: ParaId,
6975
contribution: BigDecimal,
70-
token: Token
76+
token: Token,
77+
additional: AdditionalOnChainSubmission?
7178
) = withContext(Dispatchers.Default) {
7279
val contributionInPlanks = token.planksFromAmount(contribution)
7380

7481
extrinsicService.submitExtrinsic(originAddress) {
7582
contribute(parachainId, contributionInPlanks)
83+
84+
additional?.invoke(this)
7685
}.getOrThrow()
7786
}
7887
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package jp.co.soramitsu.feature_crowdloan_impl.domain.contribute.custom.bifrost
2+
3+
import jp.co.soramitsu.fearless_utils.runtime.extrinsic.ExtrinsicBuilder
4+
import jp.co.soramitsu.feature_crowdloan_api.data.network.blockhain.binding.ParaId
5+
import jp.co.soramitsu.feature_crowdloan_impl.data.network.blockhain.extrinsic.addMemo
6+
import kotlinx.coroutines.Dispatchers
7+
import kotlinx.coroutines.withContext
8+
9+
class BifrostContributeInteractor(
10+
val fearlessReferralCode: String
11+
) {
12+
13+
suspend fun submitOnChain(
14+
paraId: ParaId,
15+
referralCode: String,
16+
extrinsicBuilder: ExtrinsicBuilder
17+
) = withContext(Dispatchers.Default) {
18+
extrinsicBuilder.addMemo(paraId, referralCode)
19+
}
20+
}

feature-crowdloan-impl/src/main/java/jp/co/soramitsu/feature_crowdloan_impl/domain/contribute/custom/karura/KaruraContributeInteractor.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ package jp.co.soramitsu.feature_crowdloan_impl.domain.contribute.custom.karura
22

33
import jp.co.soramitsu.common.base.BaseException
44
import jp.co.soramitsu.common.data.network.HttpExceptionHandler
5+
import jp.co.soramitsu.common.utils.toAddress
56
import jp.co.soramitsu.core.model.Node
6-
import jp.co.soramitsu.core.model.REAL_ROCOCO_ADDRESS_BYTE
77
import jp.co.soramitsu.fearless_utils.extensions.toHexString
88
import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAccountId
9-
import jp.co.soramitsu.fearless_utils.ss58.SS58Encoder.toAddress
109
import jp.co.soramitsu.feature_account_api.domain.interfaces.AccountRepository
1110
import jp.co.soramitsu.feature_account_api.domain.interfaces.currentNetworkType
1211
import jp.co.soramitsu.feature_account_api.domain.interfaces.signWithAccount
@@ -20,7 +19,7 @@ class KaruraContributeInteractor(
2019
private val karuraApi: KaruraApi,
2120
private val httpExceptionHandler: HttpExceptionHandler,
2221
private val accountRepository: AccountRepository,
23-
private val referralCode: String,
22+
val fearlessReferralCode: String,
2423
) {
2524

2625
suspend fun registerInBonusProgram(referralCode: String, amount: BigDecimal): Result<Unit> = runCatching {
@@ -30,8 +29,8 @@ class KaruraContributeInteractor(
3029
val networkType = selectedAccount.network.type
3130

3231
val accountAddress = when (networkType) {
33-
// we use fake address byte on rococo, so fix address with real one
34-
Node.NetworkType.ROCOCO -> selectedAccount.address.toAccountId().toAddress(REAL_ROCOCO_ADDRESS_BYTE)
32+
// karura backend requires kusama address even in rococo
33+
Node.NetworkType.ROCOCO -> selectedAccount.address.toAccountId().toAddress(Node.NetworkType.KUSAMA)
3534
else -> selectedAccount.address
3635
}
3736

@@ -69,8 +68,4 @@ class KaruraContributeInteractor(
6968
throw e
7069
}
7170
}
72-
73-
fun fearlessReferralCode(): String {
74-
return referralCode
75-
}
7671
}

0 commit comments

Comments
 (0)