Skip to content

Commit 0b21af8

Browse files
authored
Merge pull request #127 from soramitsu/rc/1.0.1
Rc/1.0.1
2 parents 8bf3bd4 + 731c2dd commit 0b21af8

File tree

80 files changed

+611
-338
lines changed

Some content is hidden

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

80 files changed

+611
-338
lines changed

app/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ android {
5555
sourceCompatibility 1.8
5656
targetCompatibility 1.8
5757
}
58+
59+
bundle {
60+
language {
61+
enableSplit = false
62+
}
63+
}
5864
}
5965
}
6066

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

Lines changed: 68 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package jp.co.soramitsu.app.root.navigation
22

3+
import android.os.Bundle
4+
import androidx.appcompat.app.AppCompatActivity
35
import androidx.navigation.NavController
6+
import androidx.navigation.NavOptions
47
import jp.co.soramitsu.app.R
58
import jp.co.soramitsu.app.root.presentation.RootRouter
9+
import jp.co.soramitsu.common.navigation.DelayedNavigation
610
import jp.co.soramitsu.common.utils.postToUiThread
711
import jp.co.soramitsu.feature_account_api.domain.model.Node
812
import jp.co.soramitsu.feature_account_impl.presentation.AccountRouter
@@ -19,6 +23,7 @@ import jp.co.soramitsu.feature_account_impl.presentation.mnemonic.confirm.Confir
1923
import jp.co.soramitsu.feature_account_impl.presentation.node.details.NodeDetailsFragment
2024
import jp.co.soramitsu.feature_account_impl.presentation.pincode.PinCodeAction
2125
import jp.co.soramitsu.feature_account_impl.presentation.pincode.PincodeFragment
26+
import jp.co.soramitsu.feature_account_impl.presentation.pincode.ToolbarConfiguration
2227
import jp.co.soramitsu.feature_onboarding_impl.OnboardingRouter
2328
import jp.co.soramitsu.feature_onboarding_impl.presentation.create.CreateAccountFragment
2429
import jp.co.soramitsu.feature_onboarding_impl.presentation.welcome.WelcomeFragment
@@ -31,35 +36,36 @@ import jp.co.soramitsu.feature_wallet_impl.presentation.send.amount.ChooseAmount
3136
import jp.co.soramitsu.feature_wallet_impl.presentation.send.confirm.ConfirmTransferFragment
3237
import jp.co.soramitsu.feature_wallet_impl.presentation.transaction.detail.TransactionDetailFragment
3338
import jp.co.soramitsu.splash.SplashRouter
39+
import kotlinx.android.parcel.Parcelize
40+
41+
@Parcelize
42+
class NavComponentDelayedNavigation(val globalActionId: Int, val extras: Bundle? = null) : DelayedNavigation
3443

3544
class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, RootRouter {
3645

3746
private var navController: NavController? = null
47+
private var activity: AppCompatActivity? = null
3848

39-
fun attachNavController(navController: NavController) {
49+
fun attach(navController: NavController, activity: AppCompatActivity) {
4050
this.navController = navController
51+
this.activity = activity
4152
}
4253

43-
override fun openAddFirstAccount() {
44-
navController?.navigate(R.id.action_splash_to_onboarding, WelcomeFragment.getBundle(false))
54+
fun detach() {
55+
navController = null
56+
activity = null
4557
}
4658

47-
override fun openCreatePin() {
48-
val action = PinCodeAction.Create(R.id.action_open_main)
49-
val bundle = PincodeFragment.getPinCodeBundle(action)
50-
navController?.navigate(R.id.action_splash_to_pin, bundle)
59+
override fun openAddFirstAccount() {
60+
navController?.navigate(R.id.action_splash_to_onboarding, WelcomeFragment.getBundle(false))
5161
}
5262

53-
override fun openCheckPin() {
54-
val action = PinCodeAction.Check(R.id.action_open_main)
63+
override fun openInitialCheckPincode() {
64+
val action = PinCodeAction.Check(NavComponentDelayedNavigation(R.id.action_open_main), ToolbarConfiguration())
5565
val bundle = PincodeFragment.getPinCodeBundle(action)
5666
navController?.navigate(R.id.action_splash_to_pin, bundle)
5767
}
5868

59-
override fun openMainScreen() {
60-
navController?.navigate(R.id.action_splash_to_main)
61-
}
62-
6369
override fun openCreateAccount(selectedNetworkType: Node.NetworkType?) {
6470
navController?.navigate(R.id.action_welcomeFragment_to_createAccountFragment, CreateAccountFragment.getBundle(selectedNetworkType))
6571
}
@@ -72,14 +78,25 @@ class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, R
7278
navController?.navigate(R.id.action_open_main)
7379
}
7480

75-
override fun openDestination(destination: Int) {
76-
navController?.navigate(destination)
81+
override fun openAfterPinCode(delayedNavigation: DelayedNavigation) {
82+
require(delayedNavigation is NavComponentDelayedNavigation)
83+
84+
val navOptions = NavOptions.Builder()
85+
.setPopUpTo(R.id.pincodeFragment, true)
86+
.setEnterAnim(R.anim.fragment_open_enter)
87+
.setExitAnim(R.anim.fragment_open_exit)
88+
.setPopEnterAnim(R.anim.fragment_close_enter)
89+
.setPopExitAnim(R.anim.fragment_close_exit)
90+
.build()
91+
92+
navController?.navigate(delayedNavigation.globalActionId, delayedNavigation.extras, navOptions)
7793
}
7894

7995
override fun openCreatePincode() {
80-
val action = PinCodeAction.Create(R.id.action_open_main)
81-
val bundle = PincodeFragment.getPinCodeBundle(action)
96+
val bundle = buildCreatePinBundle()
97+
8298
when (navController?.currentDestination?.id) {
99+
R.id.splashFragment -> navController?.navigate(R.id.action_splash_to_pin, bundle)
83100
R.id.importAccountFragment -> navController?.navigate(R.id.action_importAccountFragment_to_pincodeFragment, bundle)
84101
R.id.confirmMnemonicFragment -> navController?.navigate(R.id.action_confirmMnemonicFragment_to_pincodeFragment, bundle)
85102
}
@@ -128,7 +145,11 @@ class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, R
128145
}
129146

130147
override fun back() {
131-
navController?.navigateUp()
148+
val popped = navController!!.popBackStack()
149+
150+
if (!popped) {
151+
activity!!.finish()
152+
}
132153
}
133154

134155
override fun openChooseRecipient() {
@@ -222,16 +243,16 @@ class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, R
222243
navController?.navigate(R.id.action_nodes_to_onboarding, WelcomeFragment.getBundleWithNetworkType(true, networkType))
223244
}
224245

225-
override fun openExportMnemonic(accountAddress: String) {
246+
override fun openExportMnemonic(accountAddress: String): DelayedNavigation {
226247
val extras = ExportMnemonicFragment.getBundle(accountAddress)
227248

228-
navController?.navigate(R.id.action_accountDetailsFragment_to_exportMnemonicFragment, extras)
249+
return NavComponentDelayedNavigation(R.id.action_export_mnemonic, extras)
229250
}
230251

231-
override fun openExportSeed(accountAddress: String) {
252+
override fun openExportSeed(accountAddress: String): DelayedNavigation {
232253
val extras = ExportSeedFragment.getBundle(accountAddress)
233254

234-
navController?.navigate(R.id.action_accountDetailsFragment_to_exportSeedFragment, extras)
255+
return NavComponentDelayedNavigation(R.id.action_export_seed, extras)
235256
}
236257

237258
override fun openConfirmMnemonicOnExport(mnemonic: List<String>) {
@@ -240,10 +261,10 @@ class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, R
240261
navController?.navigate(R.id.action_exportMnemonicFragment_to_confirmExportMnemonicFragment, extras)
241262
}
242263

243-
override fun openExportJsonPassword(accountAddress: String) {
264+
override fun openExportJsonPassword(accountAddress: String): DelayedNavigation {
244265
val extras = ExportJsonPasswordFragment.getBundle(accountAddress)
245266

246-
navController?.navigate(R.id.action_accountDetailsFragment_to_exportJsonPasswordFragment, extras)
267+
return NavComponentDelayedNavigation(R.id.action_export_json, extras)
247268
}
248269

249270
override fun openExportJsonConfirm(payload: ExportJsonConfirmPayload) {
@@ -261,4 +282,26 @@ class Navigator : SplashRouter, OnboardingRouter, AccountRouter, WalletRouter, R
261282
val bundle = PincodeFragment.getPinCodeBundle(action)
262283
navController?.navigate(R.id.action_mainFragment_to_pinCodeFragment, bundle)
263284
}
264-
}
285+
286+
override fun withPinCodeCheckRequired(
287+
delayedNavigation: DelayedNavigation,
288+
createMode: Boolean,
289+
pinCodeTitleRes: Int?
290+
) {
291+
val action = if (createMode) {
292+
PinCodeAction.Create(delayedNavigation)
293+
} else {
294+
PinCodeAction.Check(delayedNavigation, ToolbarConfiguration(pinCodeTitleRes, true))
295+
}
296+
297+
val extras = PincodeFragment.getPinCodeBundle(action)
298+
299+
navController?.navigate(R.id.open_pincode_check, extras)
300+
}
301+
302+
private fun buildCreatePinBundle(): Bundle {
303+
val delayedNavigation = NavComponentDelayedNavigation(R.id.action_open_main)
304+
val action = PinCodeAction.Create(delayedNavigation)
305+
return PincodeFragment.getPinCodeBundle(action)
306+
}
307+
}

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ class RootActivity : BaseActivity<RootViewModel>(), SplashBackgroundHolder {
4141
override fun onCreate(savedInstanceState: Bundle?) {
4242
super.onCreate(savedInstanceState)
4343

44-
navController.setGraph(R.navigation.root_nav_graph)
45-
navigator.attachNavController(navController)
44+
navigator.attach(navController, this)
4645

4746
rootNetworkBar.setOnApplyWindowInsetsListener { view, insets ->
4847
view.updatePadding(top = insets.systemWindowInsetTop)
@@ -53,6 +52,12 @@ class RootActivity : BaseActivity<RootViewModel>(), SplashBackgroundHolder {
5352
// processJsonOpenIntent()
5453
}
5554

55+
override fun onDestroy() {
56+
super.onDestroy()
57+
58+
navigator.detach()
59+
}
60+
5661
override fun layoutResource(): Int {
5762
return R.layout.activity_root
5863
}
@@ -100,6 +105,10 @@ class RootActivity : BaseActivity<RootViewModel>(), SplashBackgroundHolder {
100105
// }
101106
// }
102107

103-
private val navController: NavController
104-
get() = NavHostFragment.findNavController(navHost)
108+
private val navController: NavController by lazy {
109+
val navHostFragment =
110+
supportFragmentManager.findFragmentById(R.id.navHost) as NavHostFragment
111+
112+
navHostFragment.navController
113+
}
105114
}

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,6 @@ class MainFragment : BaseFragment<MainViewModel>() {
3737
backCallback.isEnabled = false
3838
}
3939

40-
override fun onViewStateRestored(savedInstanceState: Bundle?) {
41-
super.onViewStateRestored(savedInstanceState)
42-
43-
navController!!.restoreState(savedInstanceState)
44-
}
45-
4640
override fun initViews() {
4741
val nestedNavHostFragment =
4842
childFragmentManager.findFragmentById(R.id.bottomNavHost) as NavHostFragment

app/src/main/res/layout/activity_root.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@
66
android:layout_height="match_parent"
77
android:background="@drawable/drawable_background_image">
88

9-
<fragment
9+
<androidx.fragment.app.FragmentContainerView
1010
android:id="@+id/navHost"
1111
android:name="androidx.navigation.fragment.NavHostFragment"
1212
android:layout_width="match_parent"
1313
android:layout_height="match_parent"
14+
app:navGraph="@navigation/root_nav_graph"
1415
app:defaultNavHost="true" />
1516

1617
<TextView

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

Lines changed: 27 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -41,18 +41,31 @@
4141
android:id="@+id/action_return_to_wallet"
4242
app:destination="@id/mainFragment"
4343
app:enterAnim="@anim/fragment_close_enter"
44-
app:popUpTo="@id/main_nav_graph"
45-
app:launchSingleTop="true"
4644
app:exitAnim="@anim/fragment_close_exit"
45+
app:launchSingleTop="true"
4746
app:popEnterAnim="@anim/fragment_open_enter"
48-
app:popExitAnim="@anim/fragment_open_exit" />
47+
app:popExitAnim="@anim/fragment_open_exit"
48+
app:popUpTo="@id/main_nav_graph" />
4949

50-
<action android:id="@+id/finish_export_flow"
51-
app:popUpTo="@+id/accountDetailsFragment"
50+
<action
51+
android:id="@+id/finish_export_flow"
5252
app:enterAnim="@anim/fragment_close_enter"
5353
app:exitAnim="@anim/fragment_close_exit"
5454
app:popEnterAnim="@anim/fragment_open_enter"
55-
app:popExitAnim="@anim/fragment_open_exit" />
55+
app:popExitAnim="@anim/fragment_open_exit"
56+
app:popUpTo="@+id/accountDetailsFragment" />
57+
58+
<action
59+
android:id="@+id/action_export_mnemonic"
60+
app:destination="@id/exportMnemonicFragment" />
61+
62+
<action
63+
android:id="@+id/action_export_seed"
64+
app:destination="@id/exportSeedFragment" />
65+
66+
<action
67+
android:id="@+id/action_export_json"
68+
app:destination="@id/exportJsonPasswordFragment" />
5669

5770
<fragment
5871
android:id="@+id/mainFragment"
@@ -190,32 +203,7 @@
190203
android:id="@+id/accountDetailsFragment"
191204
android:name="jp.co.soramitsu.feature_account_impl.presentation.account.details.AccountDetailsFragment"
192205
android:label="AccountDetailsFragment"
193-
tools:layout="@layout/fragment_account_details">
194-
195-
<action
196-
android:id="@+id/action_accountDetailsFragment_to_exportMnemonicFragment"
197-
app:destination="@id/exportMnemonicFragment"
198-
app:enterAnim="@anim/fragment_open_enter"
199-
app:exitAnim="@anim/fragment_open_exit"
200-
app:popEnterAnim="@anim/fragment_close_enter"
201-
app:popExitAnim="@anim/fragment_close_exit" />
202-
203-
<action
204-
android:id="@+id/action_accountDetailsFragment_to_exportSeedFragment"
205-
app:destination="@id/exportSeedFragment"
206-
app:enterAnim="@anim/fragment_open_enter"
207-
app:exitAnim="@anim/fragment_open_exit"
208-
app:popEnterAnim="@anim/fragment_close_enter"
209-
app:popExitAnim="@anim/fragment_close_exit" />
210-
211-
<action
212-
app:enterAnim="@anim/fragment_open_enter"
213-
app:exitAnim="@anim/fragment_open_exit"
214-
app:popEnterAnim="@anim/fragment_close_enter"
215-
app:popExitAnim="@anim/fragment_close_exit"
216-
android:id="@+id/action_accountDetailsFragment_to_exportJsonPasswordFragment"
217-
app:destination="@id/exportJsonPasswordFragment" />
218-
</fragment>
206+
tools:layout="@layout/fragment_account_details" />
219207

220208
<fragment
221209
android:id="@+id/editAccountsFragment"
@@ -333,26 +321,26 @@
333321
tools:layout="@layout/fragment_export_seed" />
334322

335323
<fragment
336-
tools:layout="@layout/fragment_export_json_password"
337324
android:id="@+id/exportJsonPasswordFragment"
338325
android:name="jp.co.soramitsu.feature_account_impl.presentation.exporting.json.password.ExportJsonPasswordFragment"
339-
android:label="ExportJsonPasswordFragment" >
326+
android:label="ExportJsonPasswordFragment"
327+
tools:layout="@layout/fragment_export_json_password">
340328

341329
<action
330+
android:id="@+id/action_exportJsonPasswordFragment_to_exportJsonConfirmFragment"
331+
app:destination="@id/exportJsonConfirmFragment"
342332
app:enterAnim="@anim/fragment_open_enter"
343333
app:exitAnim="@anim/fragment_open_exit"
344334
app:popEnterAnim="@anim/fragment_close_enter"
345-
app:popExitAnim="@anim/fragment_close_exit"
346-
android:id="@+id/action_exportJsonPasswordFragment_to_exportJsonConfirmFragment"
347-
app:destination="@id/exportJsonConfirmFragment" />
335+
app:popExitAnim="@anim/fragment_close_exit" />
348336

349337
</fragment>
350338

351339
<fragment
352-
tools:layout="@layout/fragment_export_json_confirm"
353340
android:id="@+id/exportJsonConfirmFragment"
354341
android:name="jp.co.soramitsu.feature_account_impl.presentation.exporting.json.confirm.ExportJsonConfirmFragment"
355-
android:label="ExportJsonConfirmFragment" />
342+
android:label="ExportJsonConfirmFragment"
343+
tools:layout="@layout/fragment_export_json_confirm" />
356344

357345
<fragment
358346
android:id="@+id/pincodeFragment"

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
app:destination="@id/pincodeFragment"
6161
app:enterAnim="@anim/fragment_open_enter"
6262
app:exitAnim="@anim/fragment_open_exit"
63-
app:popUpTo="@id/root_nav_graph"
63+
app:popUpTo="@id/welcomeFragment"
6464
app:popUpToInclusive="true"
6565
app:popEnterAnim="@anim/fragment_close_enter"
6666
app:popExitAnim="@anim/fragment_close_exit">
@@ -97,7 +97,7 @@
9797
android:id="@+id/action_confirmMnemonicFragment_to_pincodeFragment"
9898
app:destination="@id/pincodeFragment"
9999
app:enterAnim="@anim/fragment_open_enter"
100-
app:popUpTo="@id/root_nav_graph"
100+
app:popUpTo="@id/welcomeFragment"
101101
app:popUpToInclusive="true"
102102
app:exitAnim="@anim/fragment_open_exit"
103103
app:popEnterAnim="@anim/fragment_close_enter"

0 commit comments

Comments
 (0)