Skip to content

Commit

Permalink
Move Unshielding dialog to AccountDetailsFragment
Browse files Browse the repository at this point in the history
  • Loading branch information
zaiatsartem committed Feb 4, 2025
1 parent 18ab064 commit c237fb3
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 43 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ import com.concordium.wallet.data.util.CurrencyUtil
import com.concordium.wallet.databinding.ActivityAccountDetailsBinding
import com.concordium.wallet.databinding.FragmentOnboardingBinding
import com.concordium.wallet.extension.collectWhenStarted
import com.concordium.wallet.extension.showSingle
import com.concordium.wallet.ui.MainActivity
import com.concordium.wallet.ui.MainViewModel
import com.concordium.wallet.ui.account.accountdetails.other.AccountDetailsErrorFragment
import com.concordium.wallet.ui.account.accountdetails.other.AccountDetailsPendingFragment
import com.concordium.wallet.ui.account.accountdetails.transfers.AccountDetailsTransfersActivity
import com.concordium.wallet.ui.account.accountqrcode.AccountQRCodeActivity
import com.concordium.wallet.ui.account.accountslist.AccountsListActivity
import com.concordium.wallet.ui.account.accountsoverview.UnshieldingNoticeDialog
import com.concordium.wallet.ui.base.BaseActivity
import com.concordium.wallet.ui.base.BaseFragment
import com.concordium.wallet.ui.cis2.SendTokenActivity
Expand Down Expand Up @@ -206,6 +208,20 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
isFileWallet = it
}

viewModelAccountDetails.showDialogLiveData.observe(viewLifecycleOwner) { event ->
if (mainViewModel.hasCompletedOnboarding() && viewModelAccountDetails.hasShownInitialAnimation()) {
when (event.contentIfNotHandled) {
AccountDetailsViewModel.DialogToShow.UNSHIELDING -> {
UnshieldingNoticeDialog().showSingle(
childFragmentManager,
UnshieldingNoticeDialog.TAG
)
}
null -> {}
}
}
}

onboardingViewModel.identityFlow.collectWhenStarted(viewLifecycleOwner) { identity ->
onboardingStatusCard.updateViewsByIdentityStatus(identity)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ import java.math.BigInteger
class AccountDetailsViewModel(application: Application) : AndroidViewModel(application) {
private val session: Session = App.appCore.session

enum class DialogToShow {
UNSHIELDING
}

lateinit var account: Account
var hasPendingDelegationTransactions: Boolean = false
var hasPendingBakingTransactions: Boolean = false
Expand Down Expand Up @@ -84,6 +88,10 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
val accountUpdatedLiveData: LiveData<Boolean>
get() = _accountUpdatedLiveData

private val _showDialogLiveData = MutableLiveData<Event<DialogToShow>>()
val showDialogLiveData: LiveData<Event<DialogToShow>>
get() = _showDialogLiveData

private val _newAccount = MutableSharedFlow<Account>()
val newAccount = _newAccount.asSharedFlow()

Expand Down Expand Up @@ -283,6 +291,7 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
if (allAccounts.any { it.transactionStatus == TransactionStatus.FINALIZED }) {
App.appCore.session.walletStorage.setupPreferences.setHasCompletedOnboarding(true)
postState(OnboardingState.DONE)
showSingleDialogIfNeeded()
} else {
postState(state = OnboardingState.FINALIZING_ACCOUNT)
_waitingLiveData.postValue(false)
Expand All @@ -291,6 +300,21 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
updateSubmissionStatesAndBalances(false)
}

private fun showSingleDialogIfNeeded() = viewModelScope.launch(Dispatchers.IO) {
val dialogsToShow = linkedSetOf<DialogToShow>()

// Show unshielding notice if never shown and some accounts may need unshielding.
if (!App.appCore.session.isUnshieldingNoticeShown()
&& accountRepository.getAllDone().any(Account::mayNeedUnshielding)
) {
dialogsToShow += DialogToShow.UNSHIELDING
}
// Show a single dialog if needed.
if (dialogsToShow.isNotEmpty()) {
_showDialogLiveData.postValue(Event(dialogsToShow.first()))
}
}

fun initiateFrequentUpdater() {
startUpdater()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.concordium.wallet.core.arch.EventObserver
import com.concordium.wallet.data.preferences.Preferences
import com.concordium.wallet.data.room.Account
import com.concordium.wallet.databinding.FragmentAccountsOverviewBinding
import com.concordium.wallet.extension.showSingle
import com.concordium.wallet.ui.MainViewModel
import com.concordium.wallet.ui.account.accountdetails.AccountDetailsActivity
import com.concordium.wallet.ui.account.accountslist.AccountsListActivity
Expand Down Expand Up @@ -113,20 +112,6 @@ class AccountsOverviewFragment : BaseFragment() {
showError(value)
}
})
viewModel.showDialogLiveData.observe(viewLifecycleOwner) { event ->
if (mainViewModel.hasCompletedOnboarding()) {
when (event.contentIfNotHandled) {
AccountsOverviewViewModel.DialogToShow.UNSHIELDING -> {
UnshieldingNoticeDialog().showSingle(
childFragmentManager,
UnshieldingNoticeDialog.TAG
)
}

null -> {}
}
}
}
}

private fun initializeViews() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,11 @@ import com.concordium.wallet.core.arch.Event
import com.concordium.wallet.core.notifications.UpdateNotificationsSubscriptionUseCase
import com.concordium.wallet.data.AccountRepository
import com.concordium.wallet.data.model.TransactionStatus
import com.concordium.wallet.data.room.Account
import com.concordium.wallet.data.room.AccountWithIdentity
import com.concordium.wallet.ui.account.common.accountupdater.AccountUpdater
import com.concordium.wallet.ui.account.common.accountupdater.TotalBalancesData
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.math.BigInteger

class AccountsOverviewViewModel(application: Application) : AndroidViewModel(application) {

Expand All @@ -31,10 +29,6 @@ class AccountsOverviewViewModel(application: Application) : AndroidViewModel(app
val errorLiveData: LiveData<Event<Int>>
get() = _errorLiveData

private val _showDialogLiveData = MutableLiveData<Event<DialogToShow>>()
val showDialogLiveData: LiveData<Event<DialogToShow>>
get() = _showDialogLiveData

private val _listItemsLiveData = MutableLiveData<List<AccountsOverviewListItem>>()
val listItemsLiveData: LiveData<List<AccountsOverviewListItem>> = _listItemsLiveData

Expand All @@ -45,11 +39,6 @@ class AccountsOverviewViewModel(application: Application) : AndroidViewModel(app
private val updateNotificationsSubscriptionUseCase by lazy(::UpdateNotificationsSubscriptionUseCase)
private var updater: CountDownTimer? = null

enum class DialogToShow {
UNSHIELDING,
;
}

init {
accountUpdater.setUpdateListener(object : AccountUpdater.UpdateListener {
override fun onDone(totalBalances: TotalBalancesData) {
Expand Down Expand Up @@ -137,22 +126,6 @@ class AccountsOverviewViewModel(application: Application) : AndroidViewModel(app
return false
}

private fun showSingleDialogIfNeeded() = viewModelScope.launch(Dispatchers.IO) {
val dialogsToShow = linkedSetOf<DialogToShow>()

// Show unshielding notice if never shown and some accounts may need unshielding.
if (!App.appCore.session.isUnshieldingNoticeShown()
&& accountRepository.getAllDone().any(Account::mayNeedUnshielding)
) {
dialogsToShow += DialogToShow.UNSHIELDING
}

// Show a single dialog if needed.
if (dialogsToShow.isNotEmpty()) {
_showDialogLiveData.postValue(Event(dialogsToShow.first()))
}
}

private fun postListItems(accountsWithIdentity: List<AccountWithIdentity>) {
val items = mutableListOf<AccountsOverviewListItem>()
items.addAll(accountsWithIdentity.map(AccountsOverviewListItem::Account))
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/activity_unshielding_accounts.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@

<Button
android:id="@+id/done_button"
style="@style/CCX_Button_Primary"
style="@style/MW24_Button_Primary"
android:layout_width="match_parent"
android:layout_marginHorizontal="18dp"
android:layout_marginBottom="20dp"
Expand Down

0 comments on commit c237fb3

Please sign in to comment.