Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 4acee39

Browse files
committed
Fix sync transactions and push notification handling
1 parent 953cd80 commit 4acee39

14 files changed

Lines changed: 163 additions & 146 deletions

File tree

‎app/src/main/kotlin/com/gemwallet/android/MainActivity.kt‎

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -181,16 +181,7 @@ class MainActivity : FragmentActivity(), AuthRequester {
181181

182182
override fun onNewIntent(intent: Intent) {
183183
super.onNewIntent(intent)
184-
if (intent.hasExtra("walletIndex")) {
185-
val walletIndex = intent.getIntExtra("walletIndex", -1)
186-
viewModel.onNotification(walletIndex)
187-
}
188-
val data = intent.data ?: return
189-
when (data.scheme) {
190-
"wc" -> viewModel.addPairing(data.toString())
191-
}
192-
193-
viewModel.intent.update { intent }
184+
viewModel.handleIntent(intent)
194185
}
195186

196187
@Composable
@@ -417,7 +408,8 @@ class MainViewModel @Inject constructor(
417408
pauseTime.store(SystemClock.uptimeMillis())
418409
}
419410

420-
fun onNotification(walletIndex: Int) = viewModelScope.launch(Dispatchers.IO) {
411+
412+
suspend fun onWallet(walletIndex: Int) {
421413
walletIndex.takeIf { it > 0 }?.let { walletIndex ->
422414
if (sessionRepository.getSession()?.wallet?.index != walletIndex) {
423415
walletsRepository.getAll().firstOrNull()?.firstOrNull { it.index == walletIndex }?.let {
@@ -427,6 +419,22 @@ class MainViewModel @Inject constructor(
427419
}
428420
}
429421

422+
fun handleIntent(intent: Intent) {
423+
viewModelScope.launch(Dispatchers.IO) {
424+
if (intent.hasExtra("walletIndex")) {
425+
val walletIndex = intent.getIntExtra("walletIndex", -1)
426+
onWallet(walletIndex)
427+
}
428+
429+
val data = intent.data ?: return@launch
430+
431+
when (data.scheme) {
432+
"wc" -> addPairing(data.toString())
433+
else -> this@MainViewModel.intent.update { intent }
434+
435+
}
436+
}
437+
}
430438

431439
data class MainState(
432440
val initialAuth: AuthState = AuthState.Required,

‎app/src/main/kotlin/com/gemwallet/android/features/notifications/ShowSystemNotification.kt‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import com.gemwallet.android.MainActivity
1717
import com.gemwallet.android.cases.pushes.ShowSystemNotification
1818
import com.gemwallet.android.ui.R
1919
import com.gemwallet.android.ui.navigation.routes.assetRouteUri
20-
import com.gemwallet.android.ui.navigation.routes.transactionRouteUri
2120
import com.wallet.core.primitives.PushNotificationAsset
2221
import com.wallet.core.primitives.PushNotificationTransaction
2322
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -42,7 +41,7 @@ class ShowSystemNotification @Inject constructor(@ApplicationContext val applica
4241
val extra = Bundle().apply {
4342
putInt("walletIndex", data.walletIndex)
4443
}
45-
showNotification(title, subtitle, channelId, extra, "$transactionRouteUri/${data.transactionId}".toUri())
44+
showNotification(title, subtitle, channelId, extra, "$assetRouteUri/${data.assetId}".toUri())
4645
}
4746

4847
override fun showNotification(

‎app/src/main/kotlin/com/gemwallet/android/ui/navigation/WalletNavGraph.kt‎

Lines changed: 105 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -122,135 +122,130 @@ fun WalletNavGraph(
122122
MainScreen(navController = navController, currentTab = currentTab)
123123
}
124124

125-
navigation(
126-
startDestination = assetsRoute,
127-
route = "wallet-group",
128-
) {
129-
assetsScreen(
130-
onShowWallets = navController::navigateToWalletsScreen,
131-
onShowAssetManage = navController::navigateToAssetsManageScreen,
132-
onSendClick = navController::navigateToRecipientInput,
133-
onReceiveClick = navController::navigateToReceiveScreen,
134-
onBuyClick = navController::navigateToBuyScreen,
135-
onAssetClick = navController::navigateToAssetScreen,
136-
)
137-
138-
assetScreen(
139-
onCancel = onCancel,
140-
onTransfer = navController::navigateToRecipientInput,
141-
onReceive = navController::navigateToReceiveScreen,
142-
onBuy = navController::navigateToBuyScreen,
143-
onSwap = navController::navigateToSwap,
144-
onTransaction = navController::navigateToTransactionScreen,
145-
onChart = navController::navigateToAssetChartScreen,
146-
openNetwork = navController::navigateToAssetScreen,
147-
onStake = navController::navigateToStake,
148-
onConfirm = navController::navigateToConfirmScreen
149-
)
125+
assetsScreen(
126+
onShowWallets = navController::navigateToWalletsScreen,
127+
onShowAssetManage = navController::navigateToAssetsManageScreen,
128+
onSendClick = navController::navigateToRecipientInput,
129+
onReceiveClick = navController::navigateToReceiveScreen,
130+
onBuyClick = navController::navigateToBuyScreen,
131+
onAssetClick = navController::navigateToAssetScreen,
132+
)
150133

151-
assetChartScreen(
152-
onCancel = onCancel
153-
)
134+
assetScreen(
135+
onCancel = onCancel,
136+
onTransfer = navController::navigateToRecipientInput,
137+
onReceive = navController::navigateToReceiveScreen,
138+
onBuy = navController::navigateToBuyScreen,
139+
onSwap = navController::navigateToSwap,
140+
onTransaction = navController::navigateToTransactionScreen,
141+
onChart = navController::navigateToAssetChartScreen,
142+
openNetwork = navController::navigateToAssetScreen,
143+
onStake = navController::navigateToStake,
144+
onConfirm = navController::navigateToConfirmScreen
145+
)
154146

155-
assetsManageScreen(
156-
onAddAsset = navController::navigateToAddAssetScreen,
157-
onCancel = onCancel,
158-
)
147+
assetChartScreen(
148+
onCancel = onCancel
149+
)
159150

160-
navigation<Transfer>(startDestination = SendSelect) {
161-
swap(
162-
onConfirm = navController::navigateToConfirmScreen,
163-
onCancel = onCancel
164-
)
165-
166-
recipientInput(
167-
cancelAction = onCancel,
168-
recipientAction = navController::navigateToRecipientInput,
169-
amountAction = navController::navigateToAmountScreen,
170-
confirmAction = navController::navigateToConfirmScreen,
171-
)
172-
173-
amount(
174-
onCancel = onCancel,
175-
onSend = navController::navigateToSendScreen,
176-
onConfirm = navController::navigateToConfirmScreen,
177-
)
178-
179-
confirm(
180-
finishAction = { assetId, hash, route ->
181-
when (route) {
182-
assetRoutePath -> NavigateAfterConfirm.Transfer(assetId).navigate(navController)
183-
stakeRoute -> NavigateAfterConfirm.Stake(assetId).navigate(navController)
184-
swapRoute -> NavigateAfterConfirm.Swap(assetId).navigate(navController)
185-
}
186-
},
187-
onBuy = navController::navigateToBuyScreen,
188-
cancelAction = onCancel
189-
)
190-
}
151+
assetsManageScreen(
152+
onAddAsset = navController::navigateToAddAssetScreen,
153+
onCancel = onCancel,
154+
)
191155

192-
nftCollection(
193-
cancelAction = onCancel,
194-
collectionIdAction = navController::navigateToNftCollection,
195-
assetIdAction = navController::navigateToNftAsset,
196-
onRecipient = navController::navigateToRecipientInput
156+
navigation<Transfer>(startDestination = SendSelect) {
157+
swap(
158+
onConfirm = navController::navigateToConfirmScreen,
159+
onCancel = onCancel
197160
)
198161

199-
fiatScreen(
162+
recipientInput(
200163
cancelAction = onCancel,
201-
onBuy = navController::navigateToBuyScreen
164+
recipientAction = navController::navigateToRecipientInput,
165+
amountAction = navController::navigateToAmountScreen,
166+
confirmAction = navController::navigateToConfirmScreen,
202167
)
203168

204-
receiveScreen(
169+
amount(
205170
onCancel = onCancel,
206-
onReceive = navController::navigateToReceiveScreen,
171+
onSend = navController::navigateToSendScreen,
172+
onConfirm = navController::navigateToConfirmScreen,
207173
)
208174

209-
walletsScreen(
210-
onCreateWallet = navController::navigateToCreateWalletRulesScreen,
211-
onImportWallet = navController::navigateToImportWalletScreen,
212-
onEditWallet = navController::navigateToWalletScreen,
213-
onSelectWallet = {
214-
navController.navigateToRoot()
215-
currentTab.value = assetsRoute
216-
},
217-
onBoard = {
218-
navController.navigate(OnboardingDest.route) {
219-
popUpTo(0) {
220-
inclusive = true
221-
}
175+
confirm(
176+
finishAction = { assetId, hash, route ->
177+
when (route) {
178+
assetRoutePath -> NavigateAfterConfirm.Transfer(assetId).navigate(navController)
179+
stakeRoute -> NavigateAfterConfirm.Stake(assetId).navigate(navController)
180+
swapRoute -> NavigateAfterConfirm.Swap(assetId).navigate(navController)
222181
}
223182
},
224-
onCancel = onCancel
183+
onBuy = navController::navigateToBuyScreen,
184+
cancelAction = onCancel
225185
)
186+
}
226187

227-
walletScreen(
228-
onCancel = onCancel,
229-
onBoard = {
230-
navController.navigate(OnboardingDest.route) {
231-
popUpTo(0) {
232-
inclusive = true
233-
}
234-
}
235-
},
236-
onPhraseShow = navController::navigateToPhraseScreen
237-
)
188+
nftCollection(
189+
cancelAction = onCancel,
190+
collectionIdAction = navController::navigateToNftCollection,
191+
assetIdAction = navController::navigateToNftAsset,
192+
onRecipient = navController::navigateToRecipientInput
193+
)
238194

239-
stake(
240-
onAmount = navController::navigateToAmountScreen,
241-
onConfirm = navController::navigateToConfirmScreen,
242-
onDelegation = navController::navigateToDelegation,
243-
onCancel = onCancel,
244-
)
195+
fiatScreen(
196+
cancelAction = onCancel,
197+
onBuy = navController::navigateToBuyScreen
198+
)
245199

246-
addAssetScreen(
247-
onCancel = onCancel,
248-
onFinish = {
249-
navController.navigateToRoot()
250-
currentTab.value = assetsRoute
200+
receiveScreen(
201+
onCancel = onCancel,
202+
onReceive = navController::navigateToReceiveScreen,
203+
)
204+
205+
walletsScreen(
206+
onCreateWallet = navController::navigateToCreateWalletRulesScreen,
207+
onImportWallet = navController::navigateToImportWalletScreen,
208+
onEditWallet = navController::navigateToWalletScreen,
209+
onSelectWallet = {
210+
navController.navigateToRoot()
211+
currentTab.value = assetsRoute
212+
},
213+
onBoard = {
214+
navController.navigate(OnboardingDest.route) {
215+
popUpTo(0) {
216+
inclusive = true
217+
}
251218
}
252-
)
253-
}
219+
},
220+
onCancel = onCancel
221+
)
222+
223+
walletScreen(
224+
onCancel = onCancel,
225+
onBoard = {
226+
navController.navigate(OnboardingDest.route) {
227+
popUpTo(0) {
228+
inclusive = true
229+
}
230+
}
231+
},
232+
onPhraseShow = navController::navigateToPhraseScreen
233+
)
234+
235+
stake(
236+
onAmount = navController::navigateToAmountScreen,
237+
onConfirm = navController::navigateToConfirmScreen,
238+
onDelegation = navController::navigateToDelegation,
239+
onCancel = onCancel,
240+
)
241+
242+
addAssetScreen(
243+
onCancel = onCancel,
244+
onFinish = {
245+
navController.navigateToRoot()
246+
currentTab.value = assetsRoute
247+
}
248+
)
254249

255250
activitiesScreen(onTransaction = navController::navigateToTransactionScreen)
256251

‎app/src/main/kotlin/com/gemwallet/android/ui/navigation/routes/Activities.kt‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import kotlinx.serialization.SerialName
1414
import kotlinx.serialization.Serializable
1515

1616
const val activitiesRoute = "transactions"
17-
const val transactionRoute = "transaction"
1817
const val transactionRouteUri = "gem://transaction"
1918

2019
@Serializable

‎app/src/main/kotlin/com/gemwallet/android/ui/navigation/routes/Asset.kt‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,17 @@ import com.gemwallet.android.ui.models.actions.AssetIdAction
1212
import com.gemwallet.features.asset.presents.chart.views.AssetChartScene
1313
import com.gemwallet.features.asset.presents.details.views.AssetDetailsScene
1414
import com.wallet.core.primitives.AssetId
15+
import kotlinx.serialization.SerialName
1516
import kotlinx.serialization.Serializable
1617

1718

1819
const val assetRoutePath = "asset"
19-
const val assetRouteUri = "gem://$assetRoutePath"
20+
const val assetRouteUri = "gem://asset"
2021

2122
@Serializable
22-
data class AssetRoute(val assetId: String)
23+
data class AssetRoute(
24+
@SerialName("assetId") val assetId: String
25+
)
2326

2427
@Serializable
2528
data class AssetChartRoute(val assetId: String)

‎data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/session/SessionRepositoryImpl.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class SessionRepositoryImpl(
3737

3838
override fun hasSession(): Boolean = getSession() != null
3939

40-
override suspend fun setWallet(wallet: Wallet) = withContext(Dispatchers.IO) {
40+
override suspend fun setWallet(wallet: Wallet) {
4141
val oldSession = runBlocking(Dispatchers.IO) { sessionDao.getSession() }
4242
val session = if (oldSession == null) {
4343
DbSession( // Create session

‎data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/transactions/SyncTransactionsService.kt‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.gemwallet.android.data.repositoreis.transactions
22

3+
import android.util.Log
34
import com.gemwallet.android.cases.device.GetDeviceIdCase
45
import com.gemwallet.android.cases.transactions.GetTransactionUpdateTime
56
import com.gemwallet.android.cases.transactions.PutTransactions
@@ -25,7 +26,7 @@ class SyncTransactionsService @Inject constructor(
2526

2627
override suspend fun syncTransactions(wallet: Wallet) = withContext(Dispatchers.IO) {
2728
val deviceId = getDeviceIdCase.getDeviceId()
28-
val lastSyncTime = getTransactionUpdateTime.getTransactionUpdateTime(wallet.id) / 1000
29+
val lastSyncTime = getTransactionUpdateTime.getTransactionUpdateTime(wallet.id) / 1000L
2930
val response = runCatching {
3031
val result: List<Transaction>? = try {
3132
gemApiClient.getTransactions(deviceId, wallet.index, lastSyncTime)

‎data/services/store/src/main/kotlin/com/gemwallet/android/data/service/store/database/GemDatabase.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import com.gemwallet.android.data.service.store.database.entities.DbTxSwapMetada
3131
import com.gemwallet.android.data.service.store.database.entities.DbWallet
3232

3333
@Database(
34-
version = 51,
34+
version = 52,
3535
entities = [
3636
DbWallet::class,
3737
DbAccount::class,

‎data/services/store/src/main/kotlin/com/gemwallet/android/data/service/store/database/di/DatabaseModule.kt‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ object DatabaseModule {
8686
.addMigrations(Migration_48_49)
8787
.addMigrations(Migration_49_50)
8888
.addMigrations(Migration_50_51)
89+
.addMigrations(Migration_51_52)
8990
.build()
9091

9192
@Singleton
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.gemwallet.android.data.service.store.database.di
2+
3+
import androidx.room.migration.Migration
4+
import androidx.sqlite.db.SupportSQLiteDatabase
5+
6+
object Migration_51_52 : Migration(51, 52) {
7+
override fun migrate(db: SupportSQLiteDatabase) {
8+
db.execSQL("DELETE FROM transactions")
9+
}
10+
}

0 commit comments

Comments
 (0)