From ddf32700cb7f411cc379817cc06265c61efcfce2 Mon Sep 17 00:00:00 2001 From: Igor Bubelov Date: Thu, 25 Apr 2024 17:29:55 +0700 Subject: [PATCH] Implement basic notification management --- app/src/main/kotlin/conf/Conf.kt | 2 + app/src/main/kotlin/conf/ConfQueries.kt | 14 +++++-- app/src/main/kotlin/conf/ConfRepo.kt | 11 +++-- app/src/main/kotlin/db/Database.kt | 6 ++- .../main/kotlin/settings/SettingsFragment.kt | 10 +++++ app/src/main/kotlin/sync/Sync.kt | 16 ++++---- .../kotlin/sync/SyncNotificationController.kt | 12 ++++-- app/src/main/res/layout/fragment_settings.xml | 40 +++++++++++++++++++ app/src/main/res/values-af/strings.xml | 2 + app/src/main/res/values-ar/strings.xml | 2 + app/src/main/res/values-bg/strings.xml | 2 + app/src/main/res/values-bn/strings.xml | 2 + app/src/main/res/values-ca/strings.xml | 2 + app/src/main/res/values-cs/strings.xml | 2 + app/src/main/res/values-da/strings.xml | 2 + app/src/main/res/values-de/strings.xml | 2 + app/src/main/res/values-el/strings.xml | 2 + app/src/main/res/values-es/strings.xml | 2 + app/src/main/res/values-fa/strings.xml | 2 + app/src/main/res/values-fi/strings.xml | 2 + app/src/main/res/values-fr/strings.xml | 2 + app/src/main/res/values-hi/strings.xml | 2 + app/src/main/res/values-hu/strings.xml | 2 + app/src/main/res/values-it/strings.xml | 2 + app/src/main/res/values-iw/strings.xml | 2 + app/src/main/res/values-ja/strings.xml | 2 + app/src/main/res/values-ko/strings.xml | 2 + app/src/main/res/values-nl/strings.xml | 2 + app/src/main/res/values-no/strings.xml | 2 + app/src/main/res/values-pl/strings.xml | 2 + app/src/main/res/values-pt/strings.xml | 2 + app/src/main/res/values-ro/strings.xml | 2 + app/src/main/res/values-ru/strings.xml | 2 + app/src/main/res/values-sr/strings.xml | 2 + app/src/main/res/values-sv/strings.xml | 2 + app/src/main/res/values-th/strings.xml | 2 + app/src/main/res/values-tr/strings.xml | 2 + app/src/main/res/values-uk/strings.xml | 2 + app/src/main/res/values-ur/strings.xml | 2 + app/src/main/res/values-vi/strings.xml | 2 + app/src/main/res/values-zh/strings.xml | 2 + app/src/main/res/values/strings.xml | 2 + 42 files changed, 158 insertions(+), 21 deletions(-) diff --git a/app/src/main/kotlin/conf/Conf.kt b/app/src/main/kotlin/conf/Conf.kt index 749cfc20..1b8d1011 100644 --- a/app/src/main/kotlin/conf/Conf.kt +++ b/app/src/main/kotlin/conf/Conf.kt @@ -11,6 +11,8 @@ data class Conf( val viewportWestLon: Double, val showAtms: Boolean, val showOsmAttribution: Boolean, + val showSyncSummary: Boolean, + val showAllNewElements: Boolean, ) fun Conf.mapViewport(): BoundingBox { diff --git a/app/src/main/kotlin/conf/ConfQueries.kt b/app/src/main/kotlin/conf/ConfQueries.kt index a3054a29..258dc6c2 100644 --- a/app/src/main/kotlin/conf/ConfQueries.kt +++ b/app/src/main/kotlin/conf/ConfQueries.kt @@ -24,9 +24,11 @@ class ConfQueries(private val db: SQLiteOpenHelper) { viewport_south_lat, viewport_west_lon, show_atms, - show_osm_attribution + show_osm_attribution, + show_sync_summary, + show_all_new_elements ) - VALUES (?, ?, ?, ?, ?, ?, ?); + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?); """, arrayOf( conf.lastSyncDate ?: "", @@ -36,6 +38,8 @@ class ConfQueries(private val db: SQLiteOpenHelper) { conf.viewportWestLon, if (conf.showAtms) 1 else 0, if (conf.showOsmAttribution) 1 else 0, + if (conf.showSyncSummary) 1 else 0, + if (conf.showAllNewElements) 1 else 0, ), ) } @@ -55,7 +59,9 @@ class ConfQueries(private val db: SQLiteOpenHelper) { viewport_south_lat, viewport_west_lon, show_atms, - show_osm_attribution + show_osm_attribution, + show_sync_summary, + show_all_new_elements FROM conf; """, ) @@ -72,6 +78,8 @@ class ConfQueries(private val db: SQLiteOpenHelper) { viewportWestLon = cursor.getDouble(4), showAtms = cursor.getBoolean(5), showOsmAttribution = cursor.getBoolean(6), + showSyncSummary = cursor.getBoolean(7), + showAllNewElements = cursor.getBoolean(8), ) } } diff --git a/app/src/main/kotlin/conf/ConfRepo.kt b/app/src/main/kotlin/conf/ConfRepo.kt index 939c235b..4eb0d599 100644 --- a/app/src/main/kotlin/conf/ConfRepo.kt +++ b/app/src/main/kotlin/conf/ConfRepo.kt @@ -1,5 +1,7 @@ package conf +import android.content.Context +import app.isDebuggable import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -11,10 +13,11 @@ import kotlinx.coroutines.runBlocking class ConfRepo( private val queries: ConfQueries, + private val context: Context, ) { private val _conf: MutableStateFlow = MutableStateFlow( - runBlocking { queries.select() ?: DEFAULT_CONF } + runBlocking { queries.select() ?: default() } ) val conf: StateFlow = _conf.asStateFlow() @@ -29,8 +32,8 @@ class ConfRepo( _conf.update { newConf(conf.value) } } - companion object { - val DEFAULT_CONF = Conf( + fun default(): Conf { + return Conf( lastSyncDate = null, viewportNorthLat = 12.116667 + 0.04, viewportEastLon = -68.933333 + 0.04 + 0.03, @@ -38,6 +41,8 @@ class ConfRepo( viewportWestLon = -68.933333 - 0.04 + 0.03, showAtms = true, showOsmAttribution = true, + showSyncSummary = context.isDebuggable(), + showAllNewElements = context.isDebuggable(), ) } } \ No newline at end of file diff --git a/app/src/main/kotlin/db/Database.kt b/app/src/main/kotlin/db/Database.kt index f7757d0c..37da2892 100644 --- a/app/src/main/kotlin/db/Database.kt +++ b/app/src/main/kotlin/db/Database.kt @@ -9,7 +9,7 @@ import java.time.LocalDateTime val elementsUpdatedAt = MutableStateFlow(LocalDateTime.now()) fun persistentDatabase(context: Context): SQLiteOpenHelper { - return Database(context, "btcmap-2024-03-17.db") + return Database(context, "btcmap-2024-04-25.db") } fun inMemoryDatabase(): SQLiteOpenHelper { @@ -45,7 +45,9 @@ private class Database(context: Context?, name: String?) : SQLiteOpenHelper( viewport_south_lat REAL NOT NULL, viewport_west_lon REAL NOT NULL, show_atms INTEGER NOT NULL, - show_osm_attribution INTEGER NOT NULL + show_osm_attribution INTEGER NOT NULL, + show_sync_summary INTEGER NOT NULL, + show_all_new_elements INTEGER NOT NULL ); """ ) diff --git a/app/src/main/kotlin/settings/SettingsFragment.kt b/app/src/main/kotlin/settings/SettingsFragment.kt index 814a1130..2237ad1b 100644 --- a/app/src/main/kotlin/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/settings/SettingsFragment.kt @@ -65,6 +65,16 @@ class SettingsFragment : Fragment() { conf.update { it.copy(showOsmAttribution = isChecked) } } + binding.showSyncSummary.isChecked = conf.conf.value.showSyncSummary + binding.showSyncSummary.setOnCheckedChangeListener { _, isChecked -> + conf.update { it.copy(showSyncSummary = isChecked) } + } + + binding.showAllNewElements.isChecked = conf.conf.value.showAllNewElements + binding.showAllNewElements.setOnCheckedChangeListener { _, isChecked -> + conf.update { it.copy(showAllNewElements = isChecked) } + } + val lastSyncDate = conf.conf.value.lastSyncDate if (lastSyncDate != null) { diff --git a/app/src/main/kotlin/sync/Sync.kt b/app/src/main/kotlin/sync/Sync.kt index bf82a023..e1d1a724 100644 --- a/app/src/main/kotlin/sync/Sync.kt +++ b/app/src/main/kotlin/sync/Sync.kt @@ -40,8 +40,7 @@ class Sync( Log.d(TAG, "Sync was requested") val lastSyncDateTime = confRepo.conf.value.lastSyncDate - val initialSyncComplete = lastSyncDateTime != null - val minSyncIntervalExpiryDate = ZonedDateTime.now(ZoneOffset.UTC).minusMinutes(10) + val minSyncIntervalExpiryDate = ZonedDateTime.now(ZoneOffset.UTC).minusSeconds(1) Log.d(TAG, "Last sync date: $lastSyncDateTime") Log.d(TAG, "Min sync interval expiry date: $minSyncIntervalExpiryDate") @@ -74,14 +73,13 @@ class Sync( }.onSuccess { val syncTimeMs = System.currentTimeMillis() - startTime Log.d(TAG, "Finished sync in $syncTimeMs ms") + syncNotificationController.showPostSyncNotifications( + syncTimeMs = syncTimeMs, + newEvents = eventsSyncReport?.newEvents ?: emptyList(), + mapViewport = confRepo.conf.value.mapViewport(), + conf = confRepo.conf.value, + ) confRepo.update { it.copy(lastSyncDate = ZonedDateTime.now(ZoneOffset.UTC)) } - if (initialSyncComplete) { - syncNotificationController.showPostSyncNotifications( - syncTimeMs = syncTimeMs, - newEvents = eventsSyncReport?.newEvents ?: emptyList(), - mapViewport = confRepo.conf.value.mapViewport(), - ) - } _active.update { false } }.onFailure { Log.e(TAG, "Sync failed", it) diff --git a/app/src/main/kotlin/sync/SyncNotificationController.kt b/app/src/main/kotlin/sync/SyncNotificationController.kt index 2aa186e2..a96c451b 100644 --- a/app/src/main/kotlin/sync/SyncNotificationController.kt +++ b/app/src/main/kotlin/sync/SyncNotificationController.kt @@ -13,6 +13,7 @@ import androidx.core.app.ActivityCompat import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import app.isDebuggable +import conf.Conf import element.ElementsRepo import element.name import event.Event @@ -31,6 +32,7 @@ class SyncNotificationController( syncTimeMs: Long, newEvents: List, mapViewport: BoundingBox, + conf: Conf, ) { if (ActivityCompat.checkSelfPermission( context, @@ -40,9 +42,7 @@ class SyncNotificationController( return } - val showSyncSummary = context.isDebuggable() - - if (showSyncSummary) { + if (conf.showSyncSummary) { createSyncSummaryNotificationChannel(context) val builder = NotificationCompat.Builder(context, SYNC_SUMMARY_CHANNEL_ID) @@ -65,6 +65,10 @@ class SyncNotificationController( .notify(Random.Default.nextInt(1, Int.MAX_VALUE), builder.build()) } + if (conf.lastSyncDate == null) { + return + } + createNewMerchantsNotificationChannel(context) newEvents.forEach { newEvent -> @@ -79,7 +83,7 @@ class SyncNotificationController( endLongitude = element.lon, ) - val distanceThresholdMeters = if (context.isDebuggable()) { + val distanceThresholdMeters = if (conf.showAllNewElements) { 100_000_000f } else { 100_000f diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml index 824d879a..2aea6e4e 100644 --- a/app/src/main/res/layout/fragment_settings.xml +++ b/app/src/main/res/layout/fragment_settings.xml @@ -67,6 +67,46 @@ + + + + + + + + + + + + Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 0fc890ab..fec2a0fa 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes %d change diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index 56d67feb..dc906f0b 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d промяна %d промени diff --git a/app/src/main/res/values-bn/strings.xml b/app/src/main/res/values-bn/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-bn/strings.xml +++ b/app/src/main/res/values-bn/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 537a964f..5fe154ff 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7e8b5297..9a6ce72e 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d změn %d změn diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 6101afdd..dc3910b8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d Änderung %d Änderungen diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 1eb06e33..d4bc022d 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d αλλαγή %d αλλαγές diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 3eb1185c..29c03212 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d cambio %d cambios diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 1c3f266e..0647dbb6 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d modification %d modifications diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 537a964f..5fe154ff 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index f3e742c2..ba4ca0e7 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -59,6 +59,8 @@ בעיות Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements שינויים %d שינויים %d diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index c3bcb53b..4df4f370 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index c3bcb53b..4df4f370 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 8f4d857b..86b76972 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 0aa43d93..cb39aa73 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d mudança %d mudanças diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index c32ab240..67575ab1 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 85f20cf3..f42b40ae 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d правка %d правок diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index c32ab240..67575ab1 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 1cc241f2..03ca18f5 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d การเปลี่ยนแปลง diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index a87f16f1..19b9a97f 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 8f4d857b..86b76972 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index d74059a6..ad79d9c8 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d change %d changes diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index c3bcb53b..4df4f370 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c3bcb53b..4df4f370 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index bde55d0e..f5f37208 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -59,6 +59,8 @@ Issues Sync failed: %1$s New local merchant accepts bitcoins + Show sync summary + Show all new elements %d changes %d change