Skip to content

Commit da5ef1a

Browse files
authored
UI fixes (#244)
* Fix token details screen * Fix migration * Fix update belances * Fix incorrect update balances * Remove redundant
1 parent cdc6be8 commit da5ef1a

File tree

9 files changed

+39
-58
lines changed

9 files changed

+39
-58
lines changed

app/src/main/java/com/concordium/wallet/data/model/Token.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ data class Token(
8484
display = null,
8585
),
8686
balance = account.balance,
87+
isEarning = account.isBaking() || account.isDelegating(),
8788
denominator = denominator,
8889
numerator = numerator
8990
)

app/src/main/java/com/concordium/wallet/data/room/migrations/MIGRATION_10_11.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ val MIGRATION_10_11 = object : Migration(10, 11) {
1414
WHERE `id` = (
1515
SELECT `id`
1616
FROM `account_table`
17-
ORDER BY `id` ASC
17+
ORDER BY `id` DESC
1818
LIMIT 1
1919
)
2020
""")

app/src/main/java/com/concordium/wallet/ui/account/accountdetails/AccountDetailsFragment.kt

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import com.concordium.wallet.ui.cis2.TokenDetailsActivity
4545
import com.concordium.wallet.ui.cis2.TokensViewModel
4646
import com.concordium.wallet.ui.common.delegates.EarnDelegate
4747
import com.concordium.wallet.ui.common.delegates.EarnDelegateImpl
48+
import com.concordium.wallet.ui.multiwallet.WalletsActivity
4849
import com.concordium.wallet.ui.onboarding.OnboardingFragment
4950
import com.concordium.wallet.ui.onboarding.OnboardingSharedViewModel
5051
import com.concordium.wallet.ui.onboarding.OnboardingState
@@ -64,6 +65,7 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
6465
private lateinit var onboardingViewModel: OnboardingSharedViewModel
6566
private lateinit var onboardingStatusCard: OnboardingFragment
6667
private lateinit var onboardingBinding: FragmentOnboardingBinding
68+
6769
// parameter for dynamic calculation of tokensFragmentContainer height
6870
private var isFileWallet: Boolean = false
6971

@@ -184,13 +186,13 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
184186
})
185187
viewModelAccountDetails.totalBalanceLiveData.observe(viewLifecycleOwner) {
186188
showTotalBalance(it)
187-
viewModelTokens.reloadCCDBalance()
189+
viewModelTokens.loadTokensBalances()
188190
}
189191

190192
viewModelAccountDetails.activeAccount.collectWhenStarted(viewLifecycleOwner) { account ->
193+
updateViews(account)
191194
viewModelTokens.tokenData.account = account
192195
viewModelTokens.loadTokens(account.address)
193-
updateViews(account)
194196
(requireActivity() as BaseActivity).hideAccountSelector(
195197
isVisible = true,
196198
text = account.getAccountName(),
@@ -200,16 +202,16 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
200202
}
201203
}
202204

203-
viewModelAccountDetails.accountUpdatedLiveData.observe(viewLifecycleOwner) {
204-
if (it)
205+
viewModelAccountDetails.accountUpdatedFlow.collectWhenStarted(viewLifecycleOwner) {
206+
if (it) {
205207
viewModelTokens.loadTokensBalances()
208+
}
206209
}
207210

208211
viewModelAccountDetails.newFinalizedAccountFlow.collectWhenStarted(viewLifecycleOwner) {
209212
if (it.isNotEmpty()) {
210-
viewModelTokens.loadTokens(viewModelAccountDetails.activeAccount.first().address)
211-
viewModelTokens.loadTokensBalances()
212213
updateViews(viewModelAccountDetails.activeAccount.first())
214+
viewModelTokens.loadTokens(viewModelAccountDetails.activeAccount.first().address)
213215
}
214216
}
215217

@@ -279,6 +281,9 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
279281
binding.accountRemoveButton.setOnClickListener {
280282
viewModelAccountDetails.deleteAccountAndFinish()
281283
}
284+
binding.fileWalletMigrationDisclaimerLayout.setOnClickListener {
285+
startActivity(Intent(requireActivity(), WalletsActivity::class.java))
286+
}
282287
}
283288

284289
private fun updateViews(account: Account) {
@@ -412,8 +417,8 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
412417
}
413418

414419
private fun updateWhenResumed() {
415-
viewModelAccountDetails.populateTransferList()
416420
viewModelAccountDetails.updateState()
421+
viewModelAccountDetails.populateTransferList()
417422
viewModelAccountDetails.initiateFrequentUpdater()
418423
viewModelTokens.chooseToken.postValue(null) //prevent auto open TokenDetailsActivity
419424
}

app/src/main/java/com/concordium/wallet/ui/account/accountdetails/AccountDetailsViewModel.kt

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,12 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
7777
val finishLiveData: LiveData<Event<Boolean>>
7878
get() = _finishLiveData
7979

80-
private val _showPadLockLiveData = MutableLiveData<Boolean>()
81-
val showPadLockLiveData: LiveData<Boolean>
82-
get() = _showPadLockLiveData
83-
8480
private var _totalBalanceLiveData = MutableLiveData<BigInteger>()
8581
val totalBalanceLiveData: LiveData<BigInteger>
8682
get() = _totalBalanceLiveData
8783

88-
private var _accountUpdatedLiveData = MutableLiveData<Boolean>()
89-
val accountUpdatedLiveData: LiveData<Boolean>
90-
get() = _accountUpdatedLiveData
84+
private var _accountUpdatedFlow = MutableStateFlow(false)
85+
val accountUpdatedFlow = _accountUpdatedFlow.asStateFlow()
9186

9287
private val _showDialogLiveData = MutableLiveData<Event<DialogToShow>>()
9388
val showDialogLiveData: LiveData<Event<DialogToShow>>
@@ -166,7 +161,6 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
166161
_waitingLiveData.value = true
167162
}
168163
viewModelScope.launch {
169-
updateAccountFromRepository()
170164
accountUpdater.updateForAccount(account)
171165
val type =
172166
if (account.delegation != null) ProxyRepository.UPDATE_DELEGATION else ProxyRepository.REGISTER_BAKER
@@ -193,15 +187,15 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
193187
if (::account.isInitialized) {
194188
_totalBalanceLiveData.value = account.balance
195189
}
196-
_accountUpdatedLiveData.value = true
190+
_accountUpdatedFlow.emit(true)
197191
}
198192
}
199193

200194
override fun onNewAccountFinalized(accountName: String) {
201195
viewModelScope.launch {
202-
postState(OnboardingState.DONE)
196+
getActiveAccount()
203197
updateAccountFromRepository()
204-
updateAccount()
198+
postState(OnboardingState.DONE)
205199
restartUpdater(BuildConfig.ACCOUNT_UPDATE_FREQUENCY_SEC)
206200
_newFinalizedAccountFlow.value = accountName
207201
}
@@ -223,7 +217,6 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
223217
private suspend fun updateAccountFromRepository() {
224218
if (::account.isInitialized) {
225219
accountRepository.findById(account.id)?.let { accountCandidate ->
226-
_activeAccount.emit(accountCandidate)
227220
account = accountCandidate
228221
}
229222
}
@@ -316,9 +309,9 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
316309
val allAccounts = accountRepository.getAll()
317310
if (allAccounts.any { it.transactionStatus == TransactionStatus.FINALIZED }) {
318311
App.appCore.session.walletStorage.setupPreferences.setHasCompletedOnboarding(true)
312+
getActiveAccount()
319313
postState(OnboardingState.DONE)
320314
showSingleDialogIfNeeded()
321-
getActiveAccount()
322315
} else {
323316
postState(state = OnboardingState.FINALIZING_ACCOUNT)
324317
_waitingLiveData.postValue(false)

app/src/main/java/com/concordium/wallet/ui/cis2/SendTokenReceiptActivity.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ class SendTokenReceiptActivity : BaseActivity(
7777
showPageAsSendPrompt()
7878
}
7979
}
80-
binding.statusAmount.text = CurrencyUtil.formatGTU(viewModel.sendTokenData.amount)
80+
binding.statusAmount.text = CurrencyUtil.formatGTU(
81+
viewModel.sendTokenData.amount,
82+
viewModel.sendTokenData.token
83+
)
8184
binding.transactionSymbol.text =
8285
if (viewModel.sendTokenData.token?.isUnique == true)
8386
getString(R.string.cis_token_quantity)

app/src/main/java/com/concordium/wallet/ui/cis2/TokensFragment.kt

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,7 @@ class TokensFragment : Fragment() {
7979
showLoading(ready.not())
8080
if (ready) {
8181
binding.noItemsLayout.isVisible = viewModel.tokens.isEmpty()
82-
tokensAccountDetailsAdapter.setData(
83-
viewModel.tokens.map { token ->
84-
if (token.isCcd) {
85-
token.copy(
86-
isEarning = viewModel.tokenData.account?.isDelegating()!! ||
87-
viewModel.tokenData.account?.isBaking()!!
88-
)
89-
} else {
90-
token
91-
}
92-
}
93-
)
82+
tokensAccountDetailsAdapter.setData(viewModel.tokens)
9483
}
9584
}
9685
}

app/src/main/java/com/concordium/wallet/ui/cis2/TokensViewModel.kt

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ class TokensViewModel(application: Application) : AndroidViewModel(application)
7070
val tokenBalances: MutableLiveData<Boolean> by lazy { MutableLiveData<Boolean>() }
7171
val selectedTokensChanged: MutableLiveData<Boolean> by lazy { MutableLiveData<Boolean>(false) }
7272

73+
private var loadTokensJob: Job? = null
7374
private val proxyRepository = ProxyRepository()
7475
private val contractTokensRepository: ContractTokensRepository by lazy {
7576
ContractTokensRepository(
@@ -84,8 +85,11 @@ class TokensViewModel(application: Application) : AndroidViewModel(application)
8485
accountAddress: String,
8586
isFungible: Boolean? = null,
8687
) {
87-
waiting.postValue(true)
88-
viewModelScope.launch(Dispatchers.IO) {
88+
loadTokensJob?.cancel()
89+
loadTokensJob = null
90+
91+
loadTokensJob = viewModelScope.launch(Dispatchers.IO) {
92+
waiting.postValue(true)
8993
val ccdToken = getCCDDefaultToken(accountAddress)
9094
val contractTokens = contractTokensRepository.getTokens(
9195
accountAddress = accountAddress,
@@ -102,30 +106,11 @@ class TokensViewModel(application: Application) : AndroidViewModel(application)
102106
)
103107
})
104108
}
109+
loadTokensBalances()
105110
waiting.postValue(false)
106111
}
107112
}
108113

109-
fun reloadCCDBalance() {
110-
viewModelScope.launch(Dispatchers.IO) {
111-
tokenData.account?.address?.let {
112-
val ccdToken = getCCDDefaultToken(it)
113-
withContext(Dispatchers.Main) {
114-
val updatedTokens = tokens.map { token ->
115-
if (token.isCcd) {
116-
token.copy(balance = ccdToken.balance)
117-
} else {
118-
token
119-
}
120-
}
121-
tokens.clear()
122-
tokens.addAll(updatedTokens)
123-
tokenBalances.postValue(true)
124-
}
125-
}
126-
}
127-
}
128-
129114
fun lookForTokens(
130115
accountAddress: String,
131116
from: String? = null,
@@ -509,6 +494,12 @@ class TokensViewModel(application: Application) : AndroidViewModel(application)
509494
viewModelScope.launch(Dispatchers.IO) {
510495
tokenBalances.postValue(false)
511496
try {
497+
val ccdToken = getCCDDefaultToken(tokenData.account!!.address)
498+
tokens.find { it.isCcd }?.apply {
499+
balance = ccdToken.balance
500+
isEarning = ccdToken.isEarning
501+
}
502+
512503
loadTokensBalances(
513504
tokensToUpdate = tokens,
514505
accountAddress = tokenData.account!!.address,

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
android:id="@+id/at_disposal_label"
5656
android:layout_width="wrap_content"
5757
android:layout_height="wrap_content"
58-
android:layout_marginTop="8dp"
5958
android:text="@string/accounts_overview_total_details_disposal"
6059
android:visibility="gone"
6160
android:textAppearance="@style/MW24_Typography_Main_Capture_Small"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@
394394
<string name="accounts_overview_total_details_disposal">At disposal:</string>
395395
<string name="accounts_overview_total_details_disposal_amount">at disposal</string>
396396
<string name="accounts_overview_total_details_staked">Staked:</string>
397-
<string name="accounts_overview_total_details_delegating">Delegating:</string>
397+
<string name="accounts_overview_total_details_delegating">Earning:</string>
398398
<string name="accounts_overview_total_details_cooldown">Cooldown:</string>
399399
<string name="accounts_overview_balance_placeholder">0.00 CCD</string>
400400
<string name="accounts_overview_balance_suffix">CCD</string>

0 commit comments

Comments
 (0)