Skip to content

Commit e6895a0

Browse files
authored
Fix/UI updates (#245)
* Change bottom navogation behaviour * Fix transactions header * Update onboarding view when creating first account
1 parent da5ef1a commit e6895a0

File tree

14 files changed

+57
-269
lines changed

14 files changed

+57
-269
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -270,11 +270,6 @@
270270
android:launchMode="singleTop"
271271
android:parentActivityName=".ui.account.newaccountidentity.NewAccountIdentityActivity"
272272
android:screenOrientation="portrait" />
273-
<activity
274-
android:name=".ui.account.newaccountconfirmed.NewAccountConfirmedActivity"
275-
android:launchMode="singleTop"
276-
android:parentActivityName=".ui.account.newaccountsetup.NewAccountSetupActivity"
277-
android:screenOrientation="portrait" />
278273
<activity
279274
android:name=".ui.account.accountdetails.AccountReleaseScheduleActivity"
280275
android:launchMode="singleTop"

app/src/main/java/com/concordium/wallet/ui/MainActivity.kt

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.os.Bundle
55
import android.view.MenuItem
66
import android.widget.Toast
77
import androidx.core.content.ContextCompat
8-
import androidx.fragment.app.Fragment
98
import androidx.lifecycle.ViewModelProvider
109
import androidx.lifecycle.get
1110
import androidx.lifecycle.lifecycleScope
@@ -228,12 +227,11 @@ class MainActivity : BaseActivity(R.layout.activity_main, R.string.accounts_over
228227
private fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
229228
menuItem.isChecked = true
230229

231-
val state = getState(menuItem)
232-
if (state != null) {
233-
viewModel.setState(state)
234-
return true
235-
}
236-
return false
230+
val state = getState(menuItem) ?: return false
231+
232+
if (viewModel.stateLiveData.value == state) return false
233+
viewModel.setState(state)
234+
return true
237235
}
238236

239237
private fun getState(menuItem: MenuItem): MainViewModel.State? {
@@ -246,19 +244,19 @@ class MainActivity : BaseActivity(R.layout.activity_main, R.string.accounts_over
246244
}
247245

248246
private fun replaceFragment(state: MainViewModel.State) {
249-
val fragment = when (state) {
247+
val existingFragment = supportFragmentManager.findFragmentByTag(state.name)
248+
249+
val fragment = existingFragment ?: when (state) {
250250
MainViewModel.State.AccountOverview -> AccountDetailsFragment()
251251
MainViewModel.State.NewsOverview -> NewsOverviewFragment()
252252
MainViewModel.State.More -> MoreOverviewFragment()
253253
}
254-
replaceFragment(fragment)
255-
}
256254

257-
private fun replaceFragment(fragment: Fragment?) {
258-
if (fragment == null) return
259-
val transaction = supportFragmentManager.beginTransaction()
260-
transaction.replace(R.id.fragment_container, fragment)
261-
transaction.commit()
255+
if (existingFragment == null) {
256+
supportFragmentManager.beginTransaction()
257+
.replace(R.id.fragment_container, fragment, state.name)
258+
.commit()
259+
}
262260
}
263261

264262
//endregion

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,6 @@ class AccountDetailsFragment : BaseFragment(), EarnDelegate by EarnDelegateImpl(
208208
}
209209
}
210210

211-
viewModelAccountDetails.newFinalizedAccountFlow.collectWhenStarted(viewLifecycleOwner) {
212-
if (it.isNotEmpty()) {
213-
updateViews(viewModelAccountDetails.activeAccount.first())
214-
viewModelTokens.loadTokens(viewModelAccountDetails.activeAccount.first().address)
215-
}
216-
}
217-
218211
viewModelAccountDetails.fileWalletMigrationVisible.collectWhenStarted(viewLifecycleOwner) {
219212
binding.fileWalletMigrationDisclaimerLayout.isVisible = it
220213
isFileWallet = it

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

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,7 @@ class AccountDetailsViewModel(application: Application) : AndroidViewModel(appli
191191
}
192192
}
193193

194-
override fun onNewAccountFinalized(accountName: String) {
195-
viewModelScope.launch {
196-
getActiveAccount()
197-
updateAccountFromRepository()
198-
postState(OnboardingState.DONE)
199-
restartUpdater(BuildConfig.ACCOUNT_UPDATE_FREQUENCY_SEC)
200-
_newFinalizedAccountFlow.value = accountName
201-
}
202-
}
194+
override fun onNewAccountFinalized(accountName: String) { }
203195

204196
override fun onError(stringRes: Int) {
205197
_errorLiveData.value = Event(stringRes)

app/src/main/java/com/concordium/wallet/ui/account/newaccountconfirmed/NewAccountConfirmedActivity.kt

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

app/src/main/java/com/concordium/wallet/ui/account/newaccountconfirmed/NewAccountConfirmedViewModel.kt

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

app/src/main/java/com/concordium/wallet/ui/account/newaccountsetup/NewAccountSetupActivity.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import com.concordium.wallet.core.backend.BackendError
1111
import com.concordium.wallet.data.room.Account
1212
import com.concordium.wallet.data.room.Identity
1313
import com.concordium.wallet.databinding.ActivityNewAccountSetupBinding
14-
import com.concordium.wallet.ui.account.newaccountconfirmed.NewAccountConfirmedActivity
14+
import com.concordium.wallet.ui.MainActivity
1515
import com.concordium.wallet.ui.base.BaseActivity
1616
import com.concordium.wallet.ui.common.delegates.AuthDelegate
1717
import com.concordium.wallet.ui.common.delegates.AuthDelegateImpl
@@ -86,7 +86,7 @@ class NewAccountSetupActivity : BaseActivity(
8686
})
8787
viewModel.gotoAccountCreatedLiveData.observe(this, object : EventObserver<Account>() {
8888
override fun onUnhandledEvent(value: Account) {
89-
gotoNewAccountConfirmed(value)
89+
gotoNewAccountConfirmed()
9090
}
9191
})
9292
viewModel.gotoFailedLiveData.observe(
@@ -126,9 +126,9 @@ class NewAccountSetupActivity : BaseActivity(
126126
}
127127
}
128128

129-
private fun gotoNewAccountConfirmed(account: Account) {
130-
val intent = Intent(this, NewAccountConfirmedActivity::class.java)
131-
intent.putExtra(NewAccountConfirmedActivity.EXTRA_ACCOUNT, account)
129+
private fun gotoNewAccountConfirmed() {
130+
val intent = Intent(this, MainActivity::class.java)
131+
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
132132
startActivity(intent)
133133
}
134134

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,11 @@ class TokenDetailsActivity : BaseActivity(R.layout.activity_token_details),
147147

148148
private fun setBalances(token: Token) {
149149
binding.walletInfoCard.totalBalanceTextview.text = if (token.isCcd) {
150-
CurrencyUtil.formatGTU(viewModel.tokenData.account?.balance!!, token)
150+
CurrencyUtil.formatGTU(viewModel.tokenData.account?.balance!!, token) +
151+
" ${token.symbol}"
151152
} else {
152-
CurrencyUtil.formatGTU(token.balance, token)
153+
CurrencyUtil.formatGTU(token.balance, token) +
154+
" ${token.symbol}"
153155
}
154156

155157
viewModel.tokenData.account?.readOnly?.let {

app/src/main/java/com/concordium/wallet/ui/more/moreoverview/MoreOverviewFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ import com.concordium.wallet.ui.more.notifications.NotificationsPreferencesActiv
2626
import com.concordium.wallet.ui.more.tracking.TrackingPreferencesActivity
2727
import com.concordium.wallet.ui.more.unshielding.UnshieldingAccountsActivity
2828
import com.concordium.wallet.ui.multiwallet.WalletsActivity
29+
import com.concordium.wallet.ui.recipient.recipientlist.RecipientListActivity
2930
import com.concordium.wallet.ui.seed.recoverprocess.RecoverProcessActivity
3031
import com.concordium.wallet.ui.seed.reveal.SavedSeedPhraseRevealActivity
3132
import com.concordium.wallet.ui.seed.reveal.SavedSeedRevealActivity
32-
import com.concordium.wallet.ui.recipient.recipientlist.RecipientListActivity
3333
import com.concordium.wallet.ui.tokens.provider.NFTActivity
3434
import com.concordium.wallet.ui.welcome.WelcomeActivity
3535
import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -208,7 +208,7 @@ class MoreOverviewFragment : BaseFragment() {
208208
clearWalletConnectAndRestart()
209209
}
210210

211-
binding.eraseDataLayout.setOnClickListener {
211+
binding.removeWalletLayout.setOnClickListener {
212212
eraseDataAndExit()
213213
}
214214
}

app/src/main/java/com/concordium/wallet/uicore/recyclerview/pinnedheader/PinnedHeaderItemDecoration.kt

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,36 +10,45 @@ class PinnedHeaderItemDecoration(private val listener: PinnedHeaderListener) :
1010
RecyclerView.ItemDecoration() {
1111

1212
private var headerHeight: Int = 0
13+
private var cachedHeader: View? = null
14+
private var cachedHeaderPosition: Int = RecyclerView.NO_POSITION
1315

1416
override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
1517
super.onDrawOver(c, parent, state)
1618

1719
val topChild = parent.getChildAt(0) ?: return
18-
1920
val topChildPosition = parent.getChildAdapterPosition(topChild)
20-
if (topChildPosition == RecyclerView.NO_POSITION) {
21-
return
21+
if (topChildPosition == RecyclerView.NO_POSITION) return
22+
23+
val headerPosition = listener.getHeaderPositionForItem(topChildPosition)
24+
val currentHeader = if (cachedHeaderPosition == headerPosition && cachedHeader != null) {
25+
cachedHeader!!
26+
} else {
27+
getHeaderViewForItem(headerPosition, parent)
2228
}
2329

24-
val currentHeader = getHeaderViewForItem(topChildPosition, parent)
2530
fixLayoutSize(parent, currentHeader)
2631
val contactPoint = currentHeader.bottom
27-
val childInContact = getChildInContact(parent, contactPoint) ?: return
32+
val childInContact = getChildInContact(parent, contactPoint)
2833

29-
if (listener.isHeader(parent.getChildAdapterPosition(childInContact))) {
34+
if (childInContact != null && listener.isHeader(parent.getChildAdapterPosition(childInContact))) {
3035
moveHeader(c, currentHeader, childInContact)
31-
return
36+
} else {
37+
drawHeader(c, currentHeader)
3238
}
33-
34-
drawHeader(c, currentHeader)
3539
}
3640

3741
private fun getHeaderViewForItem(itemPosition: Int, parent: RecyclerView): View {
3842
val headerPosition = listener.getHeaderPositionForItem(itemPosition)
39-
val layoutResId = listener.getHeaderLayout(headerPosition)
40-
val header = LayoutInflater.from(parent.context).inflate(layoutResId, parent, false)
41-
listener.bindHeaderData(header, headerPosition)
42-
return header
43+
44+
if (cachedHeaderPosition != headerPosition || cachedHeader == null) {
45+
val layoutResId = listener.getHeaderLayout(headerPosition)
46+
val header = LayoutInflater.from(parent.context).inflate(layoutResId, parent, false)
47+
listener.bindHeaderData(header, headerPosition)
48+
cachedHeader = header
49+
cachedHeaderPosition = headerPosition
50+
}
51+
return cachedHeader!!
4352
}
4453

4554
private fun drawHeader(c: Canvas, header: View) {
@@ -57,18 +66,9 @@ class PinnedHeaderItemDecoration(private val listener: PinnedHeaderListener) :
5766
}
5867

5968
private fun getChildInContact(parent: RecyclerView, contactPoint: Int): View? {
60-
var childInContact: View? = null
61-
for (i in 0 until parent.childCount) {
62-
val child = parent.getChildAt(i)
63-
if (child.bottom > contactPoint) {
64-
if (child.top <= contactPoint) {
65-
// This child overlaps the contactPoint
66-
childInContact = child
67-
break
68-
}
69-
}
70-
}
71-
return childInContact
69+
return (0 until parent.childCount)
70+
.map { parent.getChildAt(it) }
71+
.firstOrNull { it.bottom > contactPoint && it.top <= contactPoint }
7272
}
7373

7474
/**

0 commit comments

Comments
 (0)