Skip to content

Commit 0a7f2a9

Browse files
authored
Merge pull request #849 from soramitsu/merge/staging-to-master
merge/staging-to-master
2 parents 36ba728 + 0f5ac70 commit 0a7f2a9

File tree

207 files changed

+7770
-1025
lines changed

Some content is hidden

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

207 files changed

+7770
-1025
lines changed

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ root = true
66
max_line_length = 160
77
insert_final_newline = true
88
indent_size = 4
9-
ktlint_disabled_rules = import-ordering
9+
ktlint_disabled_rules = import-ordering,package-name

app/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ dependencies {
140140
implementation project(':feature-crowdloan-api')
141141
implementation project(':feature-crowdloan-impl')
142142

143+
implementation project(':feature-polkaswap-api')
144+
implementation project(':feature-polkaswap-impl')
145+
146+
implementation project(':feature-success-api')
147+
implementation project(':feature-success-impl')
148+
143149
implementation kotlinDep
144150

145151
implementation androidDep

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import jp.co.soramitsu.app.root.navigation.Navigator
88
import jp.co.soramitsu.account.impl.presentation.AccountRouter
99
import jp.co.soramitsu.crowdloan.impl.presentation.CrowdloanRouter
1010
import jp.co.soramitsu.onboarding.impl.OnboardingRouter
11+
import jp.co.soramitsu.polkaswap.api.presentation.PolkaswapRouter
1112
import jp.co.soramitsu.staking.impl.presentation.StakingRouter
1213
import jp.co.soramitsu.wallet.impl.presentation.WalletRouter
1314
import jp.co.soramitsu.splash.SplashRouter
15+
import jp.co.soramitsu.success.presentation.SuccessRouter
1416
import javax.inject.Singleton
1517

1618
@InstallIn(SingletonComponent::class)
@@ -37,6 +39,14 @@ class NavigationModule {
3739
@Provides
3840
fun provideWalletRouter(navigator: Navigator): WalletRouter = navigator
3941

42+
@Singleton
43+
@Provides
44+
fun providePolkaswapRouter(navigator: Navigator): PolkaswapRouter = navigator
45+
46+
@Singleton
47+
@Provides
48+
fun provideSuccessRouter(navigator: Navigator): SuccessRouter = navigator
49+
4050
@Singleton
4151
@Provides
4252
fun provideStakingRouter(navigator: Navigator): StakingRouter = navigator

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

Lines changed: 85 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.lifecycle.asFlow
99
import androidx.navigation.NavController
1010
import androidx.navigation.NavDeepLinkRequest
1111
import androidx.navigation.NavOptions
12+
import it.airgap.beaconsdk.blockchain.substrate.data.SubstrateSignerPayload
1213
import jp.co.soramitsu.account.api.presentation.account.create.ChainAccountCreatePayload
1314
import jp.co.soramitsu.account.api.presentation.actions.AddAccountBottomSheet
1415
import jp.co.soramitsu.account.impl.domain.account.details.AccountInChain
@@ -18,6 +19,7 @@ import jp.co.soramitsu.account.impl.presentation.account.export.WalletExportFrag
1819
import jp.co.soramitsu.account.impl.presentation.account.exportaccounts.AccountsForExportFragment
1920
import jp.co.soramitsu.account.impl.presentation.account.list.AccountChosenNavDirection
2021
import jp.co.soramitsu.account.impl.presentation.account.list.AccountListFragment
22+
import jp.co.soramitsu.account.impl.presentation.experimental.SuccessfulFragment
2123
import jp.co.soramitsu.account.impl.presentation.exporting.json.confirm.ExportJsonConfirmFragment
2224
import jp.co.soramitsu.account.impl.presentation.exporting.json.confirm.ExportJsonConfirmPayload
2325
import jp.co.soramitsu.account.impl.presentation.exporting.json.password.ExportJsonPasswordFragment
@@ -35,8 +37,6 @@ import jp.co.soramitsu.account.impl.presentation.optionsaddaccount.OptionsAddAcc
3537
import jp.co.soramitsu.account.impl.presentation.pincode.PinCodeAction
3638
import jp.co.soramitsu.account.impl.presentation.pincode.PincodeFragment
3739
import jp.co.soramitsu.account.impl.presentation.pincode.ToolbarConfiguration
38-
import it.airgap.beaconsdk.blockchain.substrate.data.SubstrateSignerPayload
39-
import jp.co.soramitsu.account.impl.presentation.experimental.SuccessfulFragment
4040
import jp.co.soramitsu.app.R
4141
import jp.co.soramitsu.app.root.presentation.AlertFragment
4242
import jp.co.soramitsu.app.root.presentation.RootRouter
@@ -58,10 +58,15 @@ import jp.co.soramitsu.crowdloan.impl.presentation.contribute.custom.CustomContr
5858
import jp.co.soramitsu.crowdloan.impl.presentation.contribute.custom.model.CustomContributePayload
5959
import jp.co.soramitsu.crowdloan.impl.presentation.contribute.select.CrowdloanContributeFragment
6060
import jp.co.soramitsu.crowdloan.impl.presentation.contribute.select.parcel.ContributePayload
61-
import jp.co.soramitsu.wallet.impl.domain.beacon.SignStatus
62-
import jp.co.soramitsu.wallet.impl.presentation.beacon.sign.TransactionRawDataFragment
6361
import jp.co.soramitsu.onboarding.impl.OnboardingRouter
6462
import jp.co.soramitsu.onboarding.impl.welcome.WelcomeFragment
63+
import jp.co.soramitsu.polkaswap.api.presentation.PolkaswapRouter
64+
import jp.co.soramitsu.polkaswap.api.presentation.models.SwapDetailsParcelModel
65+
import jp.co.soramitsu.polkaswap.api.presentation.models.SwapDetailsViewState
66+
import jp.co.soramitsu.polkaswap.api.presentation.models.TransactionSettingsModel
67+
import jp.co.soramitsu.polkaswap.impl.presentation.swap_preview.SwapPreviewFragment
68+
import jp.co.soramitsu.polkaswap.impl.presentation.swap_tokens.SwapTokensFragment
69+
import jp.co.soramitsu.polkaswap.impl.presentation.transaction_settings.TransactionSettingsFragment
6570
import jp.co.soramitsu.runtime.multiNetwork.chain.model.Chain
6671
import jp.co.soramitsu.runtime.multiNetwork.chain.model.ChainId
6772
import jp.co.soramitsu.splash.SplashRouter
@@ -96,6 +101,9 @@ import jp.co.soramitsu.staking.impl.presentation.validators.details.CollatorDeta
96101
import jp.co.soramitsu.staking.impl.presentation.validators.details.ValidatorDetailsFragment
97102
import jp.co.soramitsu.staking.impl.presentation.validators.parcel.CollatorDetailsParcelModel
98103
import jp.co.soramitsu.staking.impl.presentation.validators.parcel.ValidatorDetailsParcelModel
104+
import jp.co.soramitsu.success.presentation.SuccessFragment
105+
import jp.co.soramitsu.success.presentation.SuccessRouter
106+
import jp.co.soramitsu.wallet.impl.domain.beacon.SignStatus
99107
import jp.co.soramitsu.wallet.impl.domain.model.PhishingType
100108
import jp.co.soramitsu.wallet.impl.presentation.AssetPayload
101109
import jp.co.soramitsu.wallet.impl.presentation.WalletRouter
@@ -106,28 +114,31 @@ import jp.co.soramitsu.wallet.impl.presentation.balance.detail.BalanceDetailFrag
106114
import jp.co.soramitsu.wallet.impl.presentation.balance.detail.frozen.FrozenAssetPayload
107115
import jp.co.soramitsu.wallet.impl.presentation.balance.detail.frozen.FrozenTokensFragment
108116
import jp.co.soramitsu.wallet.impl.presentation.balance.optionswallet.OptionsWalletFragment
109-
import jp.co.soramitsu.wallet.impl.presentation.balance.searchAssets.SearchAssetsFragment
117+
import jp.co.soramitsu.wallet.impl.presentation.balance.walletselector.light.WalletSelectorFragment
110118
import jp.co.soramitsu.wallet.impl.presentation.beacon.main.BeaconFragment
111119
import jp.co.soramitsu.wallet.impl.presentation.beacon.main.DAppMetadataModel
112120
import jp.co.soramitsu.wallet.impl.presentation.beacon.sign.SignBeaconTransactionFragment
113-
import jp.co.soramitsu.wallet.impl.presentation.balance.walletselector.light.WalletSelectorFragment
121+
import jp.co.soramitsu.wallet.impl.presentation.beacon.sign.TransactionRawDataFragment
114122
import jp.co.soramitsu.wallet.impl.presentation.history.AddressHistoryFragment
115123
import jp.co.soramitsu.wallet.impl.presentation.model.OperationParcelizeModel
116124
import jp.co.soramitsu.wallet.impl.presentation.receive.ReceiveFragment
117125
import jp.co.soramitsu.wallet.impl.presentation.send.TransferDraft
118126
import jp.co.soramitsu.wallet.impl.presentation.send.confirm.ConfirmSendFragment
119127
import jp.co.soramitsu.wallet.impl.presentation.send.setup.SendSetupFragment
120-
import jp.co.soramitsu.wallet.impl.presentation.send.success.SendSuccessFragment
121128
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.extrinsic.ExtrinsicDetailFragment
122129
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.extrinsic.ExtrinsicDetailsPayload
123130
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.reward.RewardDetailFragment
124131
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.reward.RewardDetailsPayload
132+
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.swap.SwapDetailFragment
125133
import jp.co.soramitsu.wallet.impl.presentation.transaction.detail.transfer.TransferDetailFragment
126134
import kotlinx.coroutines.flow.Flow
135+
import kotlinx.coroutines.flow.MutableStateFlow
127136
import kotlinx.coroutines.flow.emptyFlow
137+
import kotlinx.coroutines.flow.filter
128138
import kotlinx.coroutines.flow.filterNotNull
129139
import kotlinx.coroutines.flow.flowOf
130140
import kotlinx.coroutines.flow.map
141+
import kotlinx.coroutines.flow.onEach
131142
import kotlinx.parcelize.Parcelize
132143

133144
@Parcelize
@@ -140,7 +151,9 @@ class Navigator :
140151
WalletRouter,
141152
RootRouter,
142153
StakingRouter,
143-
CrowdloanRouter {
154+
CrowdloanRouter,
155+
PolkaswapRouter,
156+
SuccessRouter {
144157

145158
private var navController: NavController? = null
146159
private var activity: AppCompatActivity? = null
@@ -394,6 +407,31 @@ class Navigator :
394407
}
395408
}
396409

410+
override fun backWithResult(vararg results: Pair<String, Any?>) {
411+
val savedStateHandle = navController?.previousBackStackEntry?.savedStateHandle
412+
if (savedStateHandle != null) {
413+
results.forEach { (key, value) ->
414+
savedStateHandle[key] = value
415+
}
416+
}
417+
back()
418+
}
419+
420+
override fun openTransactionSettingsDialog(initialSettings: TransactionSettingsModel) {
421+
val bundle = TransactionSettingsFragment.getBundle(initialSettings)
422+
navController?.navigate(R.id.transactionSettingsFragment, bundle)
423+
}
424+
425+
override fun openSwapPreviewDialog(swapDetailsViewState: SwapDetailsViewState, parcelModel: SwapDetailsParcelModel) {
426+
val bundle = SwapPreviewFragment.getBundle(swapDetailsViewState, parcelModel)
427+
428+
navController?.navigate(R.id.swapPreviewFragment, bundle)
429+
}
430+
431+
override fun openSelectMarketDialog() {
432+
navController?.navigate(R.id.selectMarketFragment)
433+
}
434+
397435
override fun openCustomRebond() {
398436
navController?.navigate(R.id.action_stakingBalanceFragment_to_customRebondFragment)
399437
}
@@ -537,6 +575,10 @@ class Navigator :
537575
navController?.navigate(R.id.back_to_main)
538576
}
539577

578+
override fun returnToAssetDetails() {
579+
navController?.navigate(R.id.back_to_asset_details)
580+
}
581+
540582
override fun openValidatorDetails(validatorDetails: ValidatorDetailsParcelModel) {
541583
navController?.navigate(R.id.validatorDetailsFragment, ValidatorDetailsFragment.getBundle(validatorDetails))
542584
}
@@ -555,8 +597,14 @@ class Navigator :
555597
navController?.navigate(R.id.sendSetupFragment, bundle)
556598
}
557599

558-
override fun openSelectChain(assetId: String, chooserMode: Boolean) {
559-
val bundle = ChainSelectFragment.getBundle(assetId = assetId, chooserMode = chooserMode)
600+
override fun openSwapTokensScreen(assetPayload: AssetPayload) {
601+
val bundle = SwapTokensFragment.getBundle(assetPayload.chainAssetId, assetPayload.chainId)
602+
603+
navController?.navigate(R.id.swapTokensFragment, bundle)
604+
}
605+
606+
override fun openSelectChain(assetId: String, chainId: ChainId?, chooserMode: Boolean) {
607+
val bundle = ChainSelectFragment.getBundle(assetId = assetId, chainId = chainId, chooserMode = chooserMode)
560608
navController?.navigate(R.id.chainSelectFragment, bundle)
561609
}
562610

@@ -570,6 +618,19 @@ class Navigator :
570618
navController?.navigate(R.id.assetSelectFragment, bundle)
571619
}
572620

621+
override fun openSelectAsset(chainId: ChainId, selectedAssetId: String?, excludeAssetId: String?) {
622+
val bundle = AssetSelectFragment.getBundle(chainId, selectedAssetId, excludeAssetId)
623+
navController?.navigate(R.id.assetSelectFragment, bundle)
624+
}
625+
626+
override fun <T> observeResult(key: String): Flow<T> {
627+
val savedStateHandle = navController?.currentBackStackEntry?.savedStateHandle
628+
val resultFlow = savedStateHandle?.getStateFlow<T?>(key, null) ?: MutableStateFlow(null)
629+
return resultFlow
630+
.filter { it != null }
631+
.onEach { savedStateHandle?.set<T>(key, null) } as Flow<T>
632+
}
633+
573634
override fun openSelectChainAsset(chainId: ChainId) {
574635
val bundle = AssetSelectFragment.getBundleFilterByChain(chainId)
575636
navController?.navigate(R.id.assetSelectFragment, bundle)
@@ -589,10 +650,14 @@ class Navigator :
589650
openOperationSuccess(operationHash, chainId, null)
590651
}
591652

653+
override fun openPolkaswapDisclaimer() {
654+
navController?.navigate(R.id.polkaswapDisclaimerFragment)
655+
}
656+
592657
override fun openOperationSuccess(operationHash: String?, chainId: ChainId, customMessage: String?) {
593-
val bundle = SendSuccessFragment.getBundle(operationHash, chainId, customMessage)
658+
val bundle = SuccessFragment.getBundle(operationHash, chainId, customMessage)
594659

595-
navController?.navigate(R.id.sendSuccessFragment, bundle)
660+
navController?.navigate(R.id.successSheetFragment, bundle)
596661
}
597662

598663
override fun finishSendFlow() {
@@ -617,6 +682,12 @@ class Navigator :
617682
navController?.navigate(R.id.open_extrinsic_detail, bundle)
618683
}
619684

685+
override fun openSwapDetail(operation: OperationParcelizeModel.Swap) {
686+
val bundle = SwapDetailFragment.getBundle(operation)
687+
688+
navController?.navigate(R.id.swapDetailFragment, bundle)
689+
}
690+
620691
override fun openWallets(accountChosenNavDirection: AccountChosenNavDirection) {
621692
navController?.navigate(R.id.action_open_accounts, AccountListFragment.getBundle(accountChosenNavDirection))
622693
}
@@ -842,9 +913,8 @@ class Navigator :
842913
navController?.navigate(R.id.alertFragment, bundle)
843914
}
844915

845-
override fun openSearchAssets(chainId: String?) {
846-
val bundle = SearchAssetsFragment.getBundle(chainId)
847-
navController?.navigate(R.id.searchAssetsFragment, bundle)
916+
override fun openSearchAssets() {
917+
navController?.navigate(R.id.searchAssetsFragment)
848918
}
849919

850920
override fun openOptionsWallet(walletId: Long) {

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

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -468,9 +468,9 @@
468468
</dialog>
469469

470470
<dialog
471-
android:id="@+id/sendSuccessFragment"
472-
android:name="jp.co.soramitsu.wallet.impl.presentation.send.success.SendSuccessFragment"
473-
android:label="sendSuccessFragment" />
471+
android:id="@+id/successSheetFragment"
472+
android:name="jp.co.soramitsu.success.presentation.SuccessFragment"
473+
android:label="successSheetFragment" />
474474

475475
<dialog
476476
android:id="@+id/startStakingPoolFragment"
@@ -662,6 +662,37 @@
662662
android:name="jp.co.soramitsu.wallet.impl.presentation.balance.chainselector.ChainSelectFragment"
663663
android:label="chainSelectFragment" />
664664

665+
<dialog
666+
android:id="@+id/swapTokensFragment"
667+
android:name="jp.co.soramitsu.polkaswap.impl.presentation.swap_tokens.SwapTokensFragment"
668+
android:label="swapTokensFragment" />
669+
670+
<dialog
671+
android:id="@+id/polkaswapDisclaimerFragment"
672+
android:name="jp.co.soramitsu.polkaswap.impl.presentation.disclaimer.PolkaswapDisclaimerFragment"
673+
android:label="polkaswapDisclaimerFragment" />
674+
675+
<dialog
676+
android:id="@+id/transactionSettingsFragment"
677+
android:name="jp.co.soramitsu.polkaswap.impl.presentation.transaction_settings.TransactionSettingsFragment"
678+
android:label="transactionSettingsFragment" />
679+
680+
681+
<dialog
682+
android:id="@+id/swapPreviewFragment"
683+
android:name="jp.co.soramitsu.polkaswap.impl.presentation.swap_preview.SwapPreviewFragment"
684+
android:label="swapPreviewFragment" />
685+
686+
<dialog
687+
android:id="@+id/swapDetailFragment"
688+
android:name="jp.co.soramitsu.wallet.impl.presentation.transaction.detail.swap.SwapDetailFragment"
689+
android:label="swapDetailFragment" />
690+
691+
<dialog
692+
android:id="@+id/selectMarketFragment"
693+
android:name="jp.co.soramitsu.polkaswap.impl.presentation.select_market.SelectMarketFragment"
694+
android:label="selectMarketFragment" />
695+
665696
<dialog
666697
android:id="@+id/assetSelectFragment"
667698
android:name="jp.co.soramitsu.wallet.impl.presentation.balance.assetselector.AssetSelectFragment"
@@ -829,6 +860,14 @@
829860
app:popExitAnim="?android:attr/fragmentOpenExitAnimation"
830861
app:popUpTo="@id/mainFragment" />
831862

863+
<action
864+
android:id="@+id/back_to_asset_details"
865+
app:enterAnim="?android:attr/fragmentCloseEnterAnimation"
866+
app:exitAnim="?android:attr/fragmentCloseExitAnimation"
867+
app:popEnterAnim="?android:attr/fragmentOpenEnterAnimation"
868+
app:popExitAnim="?android:attr/fragmentOpenExitAnimation"
869+
app:popUpTo="@id/balanceDetailFragment" />
870+
832871
<fragment
833872
android:id="@+id/confirmStakingFragment"
834873
android:name="jp.co.soramitsu.staking.impl.presentation.confirm.ConfirmStakingFragment"

build.gradle

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
buildscript {
22
ext {
33
// App version
4-
versionName = '2.1.2'
5-
versionCode = 87
4+
versionName = '2.2.0'
5+
versionCode = 88
66

77
// SDK and tools
88
compileSdkVersion = 33
@@ -22,6 +22,7 @@ buildscript {
2222
biometricVersion = '1.1.0'
2323

2424
progressButtonsVersion = '2.1.0'
25+
xNetworkingVersion = '0.0.46'
2526

2627
daggerVersion = '2.43'
2728
javaxInjectVersion = '1'
@@ -168,6 +169,7 @@ buildscript {
168169
gifDep = "pl.droidsonroids.gif:android-gif-drawable:$gifVersion"
169170

170171
wsDep = "com.neovisionaries:nv-websocket-client:$wsVersion"
172+
xNetworkingDep = "jp.co.soramitsu:XNetworking-android:$xNetworkingVersion"
171173

172174
shimmerDep = "com.facebook.shimmer:shimmer:$shimmerVersion"
173175

@@ -202,7 +204,7 @@ buildscript {
202204
dependencies {
203205
classpath 'com.android.tools.build:gradle:7.3.1'
204206
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
205-
classpath 'com.google.gms:google-services:4.3.14'
207+
classpath 'com.google.gms:google-services:4.3.15'
206208
classpath "com.google.firebase:firebase-appdistribution-gradle:$firebaseAppDistrVersion"
207209
classpath "com.github.triplet.gradle:play-publisher:$playPublisherVersion"
208210
classpath "com.google.dagger:hilt-android-gradle-plugin:$daggerVersion"

common/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ android {
1717

1818
buildConfigField "String", "FIAT_CONFIG_URL", "\"https://raw.githubusercontent.com/soramitsu/fearless-utils/android/2.0.8/fiat/fiats.json\""
1919
buildConfigField "String", "APP_CONFIG_URL", "\"https://raw.githubusercontent.com/soramitsu/fearless-utils/android/2.0.8/android_app_configuration.json\""
20+
buildConfigField "String", "POLKASWAP_CONFIG_URL", "\"https://raw.githubusercontent.com/soramitsu/fearless-utils/ios/v3-jsonupd/polkaswapSettings.json\""
2021

2122
buildConfigField "String", "WEBSITE_URL", "\"https://fearlesswallet.io\""
2223
buildConfigField "String", "TWITTER_URL", "\"https://twitter.com/fearlesswallet\""

common/src/main/java/jp/co/soramitsu/common/base/BaseComposeBottomSheetDialogFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import jp.co.soramitsu.common.presentation.ErrorDialog
2525
import jp.co.soramitsu.common.utils.Event
2626
import jp.co.soramitsu.common.utils.EventObserver
2727

28-
abstract class BaseComposeBottomSheetDialogFragment<T : BaseViewModel>() : BottomSheetDialogFragment() {
28+
abstract class BaseComposeBottomSheetDialogFragment<T : BaseViewModel> : BottomSheetDialogFragment() {
2929

3030
abstract val viewModel: T
3131

0 commit comments

Comments
 (0)