Skip to content

Commit 2000ff4

Browse files
SeniorZhaicrossle
andauthored
Opt/all transaction (#5833)
* Remove divider * fix: prevent IllegalStateException when showing DialogFragment * refactor: navigation controller * Update max width * Hide not displayed item * refactor: address label * Update wallet title * Fix address title * replace channel handle event * Handle error * Fix lost check balance job * Update ime padding --------- Co-authored-by: Crossle Song <crosslesong@gmail.com>
1 parent 602c086 commit 2000ff4

24 files changed

+121
-105
lines changed

app/src/main/java/one/mixin/android/ui/address/TransferDestinationInputFragment.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@ import one.mixin.android.ui.wallet.TransactionsFragment.Companion.ARGS_ASSET
5959
import one.mixin.android.ui.wallet.TransferContactBottomSheetDialogFragment
6060
import one.mixin.android.ui.wallet.WalletListBottomSheetDialogFragment
6161
import one.mixin.android.ui.wallet.transfer.TransferBottomSheetDialogFragment
62+
import one.mixin.android.util.ErrorHandler
6263
import one.mixin.android.util.decodeICAP
64+
import one.mixin.android.util.getMixinErrorStringByCode
6365
import one.mixin.android.util.isIcapAddress
6466
import one.mixin.android.util.rxpermission.RxPermissions
6567
import one.mixin.android.util.viewBinding
@@ -597,7 +599,7 @@ class TransferDestinationInputFragment() : BaseFragment(R.layout.fragment_addres
597599
}
598600
}
599601
} else {
600-
errorInfo = response.errorDescription
602+
errorInfo = requireContext().getMixinErrorStringByCode(response.errorCode, response.errorDescription)
601603
}
602604
}
603605
} catch (e: Exception) {

app/src/main/java/one/mixin/android/ui/address/page/AddressInputPage.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.foundation.layout.Spacer
88
import androidx.compose.foundation.layout.fillMaxSize
99
import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
11+
import androidx.compose.foundation.layout.imePadding
1112
import androidx.compose.foundation.layout.padding
1213
import androidx.compose.foundation.layout.width
1314
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -90,7 +91,7 @@ fun AddressInputPage(
9091
.fillMaxSize()
9192
.padding(horizontal = 20.dp)
9293
) {
93-
Column {
94+
Column(modifier = Modifier.imePadding()) {
9495
TokenInfoHeader(token = token, web3Token = web3Token)
9596
Box(
9697
modifier = Modifier

app/src/main/java/one/mixin/android/ui/address/page/AddressSearchBottomSheet.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,10 +274,11 @@ private fun AddressListItem(
274274
style = TextStyle(
275275
fontSize = 16.sp,
276276
color = MixinAppTheme.colors.textPrimary,
277-
lineHeight = 20.sp
278-
)
277+
lineHeight = 20.sp,
278+
),
279+
modifier = Modifier.weight(1f)
279280
)
280-
Spacer(modifier = Modifier.weight(1f))
281+
Spacer(modifier = Modifier.width(4.dp))
281282
Text(
282283
text = address.updatedAt.timeAgoDate(context),
283284
color = MixinAppTheme.colors.textAssist,

app/src/main/java/one/mixin/android/ui/address/page/LabelInputPage.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.imePadding
1213
import androidx.compose.foundation.layout.padding
1314
import androidx.compose.foundation.layout.width
1415
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -94,7 +95,7 @@ fun LabelInputPage(
9495
.fillMaxSize()
9596
.padding(16.dp)
9697
) {
97-
Column {
98+
Column(modifier = Modifier.imePadding()) {
9899
TokenInfoHeader(token = token, web3Token = web3Token)
99100
Box(
100101
modifier = Modifier

app/src/main/java/one/mixin/android/ui/address/page/MemoInputPage.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.imePadding
1213
import androidx.compose.foundation.layout.padding
1314
import androidx.compose.foundation.layout.width
1415
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -98,7 +99,7 @@ fun MemoInputPage(
9899
.fillMaxSize()
99100
.padding(16.dp)
100101
) {
101-
Column {
102+
Column(modifier = Modifier.imePadding()) {
102103
TokenInfoHeader(token = token, web3Token = web3Token)
103104
Box(
104105
modifier = Modifier

app/src/main/java/one/mixin/android/ui/address/page/TransferDestinationInputPage.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.fillMaxSize
1010
import androidx.compose.foundation.layout.fillMaxWidth
1111
import androidx.compose.foundation.layout.height
1212
import androidx.compose.foundation.layout.heightIn
13+
import androidx.compose.foundation.layout.imePadding
1314
import androidx.compose.foundation.layout.padding
1415
import androidx.compose.foundation.layout.size
1516
import androidx.compose.foundation.layout.width
@@ -72,10 +73,8 @@ import one.mixin.android.ui.address.AddressViewModel
7273
import one.mixin.android.ui.address.component.DestinationMenu
7374
import one.mixin.android.ui.address.component.TokenInfoHeader
7475
import one.mixin.android.ui.wallet.alert.components.cardBackground
75-
import one.mixin.android.ui.wallet.components.PREF_NAME
7676
import one.mixin.android.vo.Address
7777
import one.mixin.android.vo.WalletCategory
78-
import one.mixin.android.vo.WithdrawalMemoPossibility
7978
import one.mixin.android.vo.safe.TokenItem
8079
import one.mixin.android.web3.js.Web3Signer
8180

@@ -158,15 +157,6 @@ fun TransferDestinationInputPage(
158157
else -> stringResource(R.string.Privacy_Wallet)
159158
}
160159
Row(verticalAlignment = Alignment.CenterVertically) {
161-
if (name == null && web3Token == null) { // Privacy Wallet
162-
Icon(
163-
painter = painterResource(id = R.drawable.ic_wallet_privacy),
164-
contentDescription = null,
165-
tint = Color.Unspecified,
166-
modifier = Modifier.size(12.dp)
167-
)
168-
Spacer(modifier = Modifier.width(4.dp))
169-
}
170160
Text(
171161
text = subtitleText,
172162
fontSize = 12.sp,
@@ -175,6 +165,15 @@ fun TransferDestinationInputPage(
175165
maxLines = 1,
176166
overflow = TextOverflow.Ellipsis
177167
)
168+
if (name == null && web3Token == null) { // Privacy Wallet
169+
Spacer(modifier = Modifier.width(4.dp))
170+
Icon(
171+
painter = painterResource(id = R.drawable.ic_wallet_privacy),
172+
contentDescription = null,
173+
tint = Color.Unspecified,
174+
modifier = Modifier.size(12.dp)
175+
)
176+
}
178177
}
179178
},
180179
verticalScrollable = false,
@@ -196,6 +195,7 @@ fun TransferDestinationInputPage(
196195
.fillMaxSize()
197196
.verticalScroll(rememberScrollState())
198197
.padding(horizontal = 20.dp)
198+
.imePadding(),
199199
) {
200200
TokenInfoHeader(token = token, web3Token = web3Token)
201201
Box(

app/src/main/java/one/mixin/android/ui/common/BottomSheetViewModel.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,7 +779,7 @@ class BottomSheetViewModel
779779
Timber.e("Kernel Duplicate Invoice Transaction(${signedTransaction.trace}): sign db end")
780780
}
781781
}
782-
782+
jobManager.addJobInBackground(CheckBalanceJob(arrayListOf(asset)))
783783
val signedResponse = postTransactionWithRetry(signedTransaction.signResult.raw,signedTransaction.trace)
784784
if (signedResponse.isSuccess) {
785785
withContext(SINGLE_DB_THREAD) {
@@ -997,6 +997,11 @@ class BottomSheetViewModel
997997
}
998998
}
999999
}
1000+
invoice.entries.map { assetIdToAsset(it.assetId) }.let {
1001+
val list = arrayListOf<String>()
1002+
list.addAll(it)
1003+
jobManager.addJobInBackground(CheckBalanceJob(list))
1004+
}
10001005
val signedResponse = tokenRepository.transactions(signedTransactions.map { TransactionRequest(it.signResult.raw, it.trace) })
10011006
if (signedResponse.isSuccess) {
10021007
withContext(SINGLE_DB_THREAD) {

app/src/main/java/one/mixin/android/ui/common/NavigationController.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class NavigationController(mainActivity: MainActivity) {
2929

3030
data object Market : Destination(MarketFragment.TAG)
3131

32-
private val destinations = listOf(ConversationList, Wallet, Market, Explore)
32+
private val destinations = listOf(ConversationList.tag, Wallet.tag, Market.tag, Explore.tag)
3333

3434
fun navigate(
3535
destination: Destination,
@@ -46,10 +46,8 @@ class NavigationController(mainActivity: MainActivity) {
4646
} else {
4747
tx.show(f)
4848
}
49-
destinations.forEach { d ->
50-
if (d != destination) {
51-
fragmentManager.findFragmentByTag(d.tag)?.let { tx.hide(it) }
52-
}
49+
fragmentManager.fragments.filter { it.tag in destinations && it.tag != destination.tag }.forEach { fragment ->
50+
tx.hide(fragment)
5351
}
5452
tx.commitNowAllowingStateLoss()
5553
} catch (e: Exception) {

app/src/main/java/one/mixin/android/ui/home/ConversationListFragment.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,9 @@ class ConversationListFragment : LinkFragment() {
740740
}
741741
}
742742

743-
bottomSheet.show()
743+
if (!parentFragmentManager.isStateSaved) {
744+
bottomSheet.show()
745+
}
744746
}
745747

746748
override fun onResume() {
@@ -757,7 +759,7 @@ class ConversationListFragment : LinkFragment() {
757759
val existingDialog = parentFragmentManager.findFragmentByTag(ReminderBottomSheetDialogFragment.TAG) as? ReminderBottomSheetDialogFragment
758760
existingDialog?.dismiss() // Use dismiss() instead of dismissNow()
759761

760-
if (type != null) {
762+
if (type != null && !parentFragmentManager.isStateSaved) {
761763
if (parentFragmentManager.findFragmentByTag(ReminderBottomSheetDialogFragment.TAG) == null) {
762764
ReminderBottomSheetDialogFragment.newInstance(type).show(parentFragmentManager, ReminderBottomSheetDialogFragment.TAG)
763765
}

app/src/main/java/one/mixin/android/ui/home/MainActivity.kt

Lines changed: 12 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@ import io.reactivex.Maybe
4343
import io.reactivex.android.schedulers.AndroidSchedulers
4444
import io.reactivex.schedulers.Schedulers
4545
import kotlinx.coroutines.Dispatchers
46+
import kotlinx.coroutines.channels.Channel
4647
import kotlinx.coroutines.delay
48+
import kotlinx.coroutines.flow.receiveAsFlow
4749
import kotlinx.coroutines.launch
4850
import kotlinx.coroutines.runBlocking
4951
import kotlinx.coroutines.withContext
@@ -997,33 +999,25 @@ class MainActivity : BlazeBaseActivity() {
997999
MarketFragment()
9981000
}
9991001

1002+
private val channel = Channel<Int>(Channel.CONFLATED)
1003+
10001004
private fun initBottomNav() {
10011005
binding.apply {
10021006
bottomNav.itemIconTintList = null
10031007
bottomNav.menu.findItem(R.id.nav_chat).isChecked = true
10041008

1005-
bottomNav.itemSelections()
1006-
.map { it.itemId }
1007-
.distinctUntilChanged()
1008-
.observeOn(AndroidSchedulers.mainThread())
1009-
.autoDispose(destroyScope)
1010-
.subscribe { itemId ->
1011-
Timber.e(
1012-
"onItemSelected: ${
1013-
when (itemId) {
1014-
R.id.nav_chat -> "nav_chat"
1015-
R.id.nav_wallet -> "nav_wallet"
1016-
R.id.nav_market -> "nav_market"
1017-
R.id.nav_more -> "nav_more"
1018-
else -> "unknown"
1019-
}
1020-
}"
1021-
)
1022-
handleNavigationItemSelected(itemId)
1009+
bottomNav.setOnItemSelectedListener {
1010+
lifecycleScope.launch {
1011+
channel.send(it.itemId)
10231012
}
1013+
return@setOnItemSelectedListener it.itemId in listOf(R.id.nav_chat, R.id.nav_wallet, R.id.nav_more, R.id.nav_market)
1014+
}
10241015
}
10251016

10261017
lifecycleScope.launch {
1018+
channel.receiveAsFlow().collect { itemId ->
1019+
handleNavigationItemSelected(itemId)
1020+
}
10271021
val swap = defaultSharedPreferences.getBoolean(Account.PREF_HAS_USED_WALLET_LIST, true) || defaultSharedPreferences.getBoolean(Account.PREF_HAS_USED_BUY, true) ||
10281022
defaultSharedPreferences.getBoolean(Account.PREF_HAS_USED_SWAP, true)
10291023

0 commit comments

Comments
 (0)