Skip to content

Commit cdc6be8

Browse files
authored
Fix address book screen (#243)
- Fix crash when opening the address book from the More screen - Do not show the Continue button if not selecting a recipient
1 parent 49a138a commit cdc6be8

File tree

5 files changed

+52
-65
lines changed

5 files changed

+52
-65
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ data class Recipient(
1010
@PrimaryKey(autoGenerate = true)
1111
val id: Int,
1212
var name: String,
13-
var address: String
13+
var address: String,
1414
) : Serializable {
15+
1516
constructor(
1617
account: Account,
1718
id: Int = 0,
@@ -20,4 +21,12 @@ data class Recipient(
2021
name = account.getAccountName(),
2122
address = account.address,
2223
)
24+
25+
constructor(
26+
address: String,
27+
) : this(
28+
id = 0,
29+
name = "",
30+
address = address,
31+
)
2332
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,8 @@ class SendTokenActivity : BaseActivity(R.layout.activity_send_token, R.string.ci
153153
private fun initializeAddressBook() {
154154
binding.recipientLayout.setOnClickListener {
155155
val intent = Intent(this, RecipientListActivity::class.java)
156-
intent.putExtra(RecipientListActivity.EXTRA_SELECT_RECIPIENT_MODE, true)
157156
intent.putExtra(RecipientListActivity.EXTRA_SHIELDED, viewModel.sendTokenData.account)
158-
intent.putExtra(RecipientListActivity.EXTRA_ACCOUNT, viewModel.sendTokenData.account)
157+
intent.putExtra(RecipientListActivity.EXTRA_SENDER_ACCOUNT, viewModel.sendTokenData.account)
159158
getResultRecipient.launch(intent)
160159
}
161160
}
@@ -189,6 +188,8 @@ class SendTokenActivity : BaseActivity(R.layout.activity_send_token, R.string.ci
189188

190189
if (recipient.name.isNotEmpty()) {
191190
onReceiverNameFound(recipient.name)
191+
} else {
192+
binding.recipientName.visibility = View.GONE
192193
}
193194
}
194195
}

app/src/main/java/com/concordium/wallet/ui/recipient/recipientlist/RecipientListActivity.kt

Lines changed: 23 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,15 @@ import com.concordium.wallet.ui.recipient.recipient.RecipientActivity
1818
import com.concordium.wallet.ui.scanqr.ScanQRActivity
1919
import com.concordium.wallet.util.KeyboardUtil.showKeyboard
2020
import com.concordium.wallet.util.Log
21-
import com.concordium.wallet.util.getSerializable
21+
import com.concordium.wallet.util.getOptionalSerializable
2222

2323
class RecipientListActivity :
2424
BaseActivity(R.layout.activity_recipient_list, R.string.recipient_list_default_title),
2525
INotification {
2626

2727
companion object {
28-
const val EXTRA_SELECT_RECIPIENT_MODE = "EXTRA_SELECT_RECIPIENT_MODE"
2928
const val EXTRA_SHIELDED = "EXTRA_SHIELDED"
30-
const val EXTRA_ACCOUNT = "EXTRA_ACCOUNT"
29+
const val EXTRA_SENDER_ACCOUNT = "EXTRA_SENDER_ACCOUNT"
3130
const val EXTRA_RECIPIENT = "EXTRA_RECIPIENT"
3231
}
3332

@@ -37,25 +36,21 @@ class RecipientListActivity :
3736
ActivityRecipientListBinding.bind(findViewById(R.id.root_layout))
3837
}
3938
private lateinit var recipientAdapter: RecipientAdapter
40-
private lateinit var account: Account
41-
private var accountAddress: String = ""
4239

4340
//region Lifecycle
4441
// ************************************************************
4542

4643
override fun onCreate(savedInstanceState: Bundle?) {
4744
super.onCreate(savedInstanceState)
4845

49-
val selectRecipientMode = intent.getBooleanExtra(EXTRA_SELECT_RECIPIENT_MODE, false)
50-
val isShielded = intent.getBooleanExtra(EXTRA_SHIELDED, false)
51-
account = intent.getSerializable(EXTRA_ACCOUNT, Account::class.java)
52-
5346
initializeViewModel()
54-
if (::account.isInitialized)
55-
viewModel.initialize(selectRecipientMode, isShielded, account)
56-
else
57-
viewModel.initialize(selectRecipientMode, isShielded, null)
58-
47+
viewModel.initialize(
48+
isShielded = intent.getBooleanExtra(EXTRA_SHIELDED, false),
49+
senderAccount = intent.getOptionalSerializable(
50+
EXTRA_SENDER_ACCOUNT,
51+
Account::class.java
52+
)
53+
)
5954
initializeViews()
6055

6156
hideAddContact(isVisible = true) {
@@ -110,35 +105,13 @@ class RecipientListActivity :
110105
}
111106
})
112107

113-
binding.continueBtn.setOnClickListener {
114-
goBackWithRecipient(
115-
Recipient(
116-
id = 0,
117-
name = account.name,
118-
address = accountAddress
119-
)
120-
)
121-
}
122-
123108
listOf(binding.searchLayout, binding.searchIcon).forEach {
124109
it.setOnClickListener {
125110
showKeyboard(this, binding.recipientSearchview)
126111
}
127112
}
128113

129114
initializeList()
130-
131-
/*
132-
viewModel.account?.let {
133-
val shieldHeaderTextRes = if (viewModel.isShielded) R.string.recipient_list_unshield_amount else R.string.recipient_list_shield_amount
134-
recipient_own_account.findViewById<TextView>(R.id.recipient_name_textview).setText(shieldHeaderTextRes)
135-
recipient_own_account.findViewById<TextView>(R.id.recipient_address_textview).setText(it.address)
136-
}
137-
recipient_own_account.setOnClickListener(View.OnClickListener {
138-
viewModel.account?.let {
139-
goBackToSendFunds(Recipient(it.id, it.name, it.address))
140-
}
141-
})*/
142115
}
143116

144117
private val gerResultQRScan =
@@ -152,9 +125,19 @@ class RecipientListActivity :
152125
}
153126

154127
private fun onSearchTextChanged(text: String?) {
155-
text?.let {
156-
accountAddress = it
157-
binding.continueBtn.isVisible = viewModel.validateRecipientAddress(it)
128+
if (text != null) {
129+
if (viewModel.canGoBackWithRecipientAddress(text)) {
130+
binding.continueBtn.isVisible = true
131+
binding.continueBtn.setOnClickListener {
132+
goBackWithRecipient(
133+
Recipient(
134+
address = text,
135+
)
136+
)
137+
}
138+
} else {
139+
binding.continueBtn.isVisible = false
140+
}
158141
}
159142
showSearchIcons(text)
160143
recipientAdapter.filter(text)
@@ -171,7 +154,7 @@ class RecipientListActivity :
171154
}
172155

173156
override fun handleRowClick(item: Recipient) {
174-
if (viewModel.selectRecipientMode) {
157+
if (viewModel.canGoBackWithRecipientAddress(item.address)) {
175158
goBackWithRecipient(item)
176159
} else {
177160
gotoEditRecipient(item)

app/src/main/java/com/concordium/wallet/ui/recipient/recipientlist/RecipientListViewModel.kt

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,26 +15,23 @@ import kotlinx.coroutines.launch
1515

1616
class RecipientListViewModel(application: Application) : AndroidViewModel(application) {
1717

18-
private var account: Account? = null
18+
private var senderAccount: Account? = null
1919
private var isShielded: Boolean = false
2020
private val recipientRepository =
2121
RecipientRepository(App.appCore.session.walletStorage.database.recipientDao())
22-
var selectRecipientMode = false
23-
private set
2422

2523
private val allRecipientsLiveData = recipientRepository.allRecipients
2624
val recipientListLiveData: LiveData<List<Recipient>>
2725
get() = allRecipientsLiveData.switchMap { allRecipients ->
2826
val filteredRecipientsLiveData = MutableLiveData<List<Recipient>>()
27+
val senderAccount = this.senderAccount
2928
val recipientsToShowLiveData = when {
30-
selectRecipientMode -> {
31-
account?.let {
32-
val filteredList = allRecipients.filter { recipient ->
33-
recipient.address != it.address
34-
}
35-
filteredRecipientsLiveData.value = filteredList
36-
filteredRecipientsLiveData
29+
senderAccount != null -> {
30+
val filteredList = allRecipients.filter { recipient ->
31+
recipient.address != senderAccount.address
3732
}
33+
filteredRecipientsLiveData.value = filteredList
34+
filteredRecipientsLiveData
3835
}
3936

4037
else -> {
@@ -51,20 +48,18 @@ class RecipientListViewModel(application: Application) : AndroidViewModel(applic
5148
get() = _waitingLiveData
5249

5350
fun initialize(
54-
selectRecipientMode: Boolean,
55-
shielded: Boolean,
56-
account: Account?
51+
isShielded: Boolean,
52+
senderAccount: Account?,
5753
) {
58-
this.selectRecipientMode = selectRecipientMode
59-
this.isShielded = shielded
60-
this.account = account
54+
this.isShielded = isShielded
55+
this.senderAccount = senderAccount
6156
}
6257

6358
fun deleteRecipient(recipient: Recipient) = viewModelScope.launch(Dispatchers.IO) {
6459
recipientRepository.delete(recipient)
6560
}
6661

67-
fun validateRecipientAddress(address: String): Boolean {
68-
return cryptoLibrary.checkAccountAddress(address)
62+
fun canGoBackWithRecipientAddress(address: String): Boolean {
63+
return senderAccount != null && cryptoLibrary.checkAccountAddress(address)
6964
}
7065
}

app/src/main/java/com/concordium/wallet/util/Extensions.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.concordium.wallet.util
22

33
import android.content.Intent
44
import android.os.Build
5-
import android.os.Bundle
65
import java.io.Serializable
76
import java.math.BigInteger
87

@@ -27,12 +26,12 @@ fun <T : Serializable?> Intent.getSerializable(key: String, m_class: Class<T>):
2726
}
2827
}
2928

30-
fun <T : Serializable?> Bundle.getSerializableFromBundle(key: String, m_class: Class<T>): T {
29+
fun <T : Serializable?> Intent.getOptionalSerializable(key: String, m_class: Class<T>): T? {
3130
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU)
32-
this.getSerializable(key, m_class)!!
31+
this.getSerializableExtra(key, m_class)
3332
else {
3433
@Suppress("DEPRECATION", "UNCHECKED_CAST")
35-
this.getSerializable(key) as T
34+
this.getSerializableExtra(key) as? T
3635
}
3736
}
3837

0 commit comments

Comments
 (0)