Skip to content

Commit 69fc3f1

Browse files
committed
[settings] notify user on real changes only
1 parent 4aa519d commit 69fc3f1

File tree

8 files changed

+167
-54
lines changed

8 files changed

+167
-54
lines changed

app/src/main/java/me/capcom/smsgateway/modules/encryption/EncryptionSettings.kt

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,18 @@ class EncryptionSettings(
4040
private const val VERSION = "version"
4141
}
4242

43-
override fun import(data: Map<String, *>) {
44-
data.forEach { (key, value) ->
45-
when (key) {
46-
PASSPHRASE -> storage.set(key, value?.toString())
43+
override fun import(data: Map<String, *>): Boolean {
44+
return data.map {
45+
when (it.key) {
46+
PASSPHRASE -> {
47+
val newValue = it.value?.toString()
48+
val changed = passphrase != newValue
49+
storage.set(it.key, newValue)
50+
changed
51+
}
52+
53+
else -> false
4754
}
48-
}
55+
}.any { it }
4956
}
5057
}

app/src/main/java/me/capcom/smsgateway/modules/gateway/GatewaySettings.kt

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,33 @@ class GatewaySettings(
5050
)
5151
}
5252

53-
override fun import(data: Map<String, *>) {
54-
data.forEach { (key, value) ->
55-
when (key) {
53+
override fun import(data: Map<String, *>): Boolean {
54+
return data.map {
55+
when (it.key) {
5656
CLOUD_URL -> {
57-
val url = value?.toString()
57+
val url = it.value?.toString()
5858
if (url != null && !url.startsWith("https://")) {
5959
throw IllegalArgumentException("url must start with https://")
6060
}
61-
storage.set(key, url)
61+
62+
val changed = serverUrl != url
63+
64+
storage.set(it.key, url)
65+
66+
changed
67+
}
68+
69+
PRIVATE_TOKEN -> {
70+
val newValue = it.value?.toString()
71+
val changed = privateToken != newValue
72+
73+
storage.set(it.key, newValue)
74+
75+
changed
6276
}
6377

64-
PRIVATE_TOKEN -> storage.set(key, value?.toString())
78+
else -> false
6579
}
66-
}
80+
}.any { it }
6781
}
6882
}

app/src/main/java/me/capcom/smsgateway/modules/logs/LogsSettings.kt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,20 @@ class LogsSettings(
4444
)
4545
}
4646

47-
override fun import(data: Map<String, *>) {
48-
data.forEach { (key, value) ->
49-
when (key) {
50-
LIFETIME_DAYS -> storage.set(key, value?.toString()?.toFloat()?.toInt()?.toString())
47+
override fun import(data: Map<String, *>): Boolean {
48+
return data.map {
49+
when (it.key) {
50+
LIFETIME_DAYS -> {
51+
val newValue = it.value?.toString()?.toFloat()?.toInt()
52+
val changed = lifetimeDays != newValue
53+
54+
storage.set(it.key, newValue?.toString())
55+
56+
changed
57+
}
58+
59+
else -> false
5160
}
52-
}
61+
}.any { it }
5362
}
5463
}

app/src/main/java/me/capcom/smsgateway/modules/messages/MessagesSettings.kt

Lines changed: 70 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -107,44 +107,92 @@ class MessagesSettings(
107107
)
108108
}
109109

110-
override fun import(data: Map<String, *>) {
111-
data.forEach { (key, value) ->
110+
override fun import(data: Map<String, *>): Boolean {
111+
return data.map {
112+
val key = it.key
113+
val value = it.value
114+
112115
when (key) {
113-
SEND_INTERVAL_MIN -> storage.set(
114-
key,
115-
value?.toString()?.toFloat()?.toInt()?.toString()
116-
)
116+
SEND_INTERVAL_MIN -> {
117+
val newValue = value?.toString()?.toFloat()?.toInt()
118+
val changed = this.sendIntervalMin != newValue
119+
120+
storage.set(
121+
key,
122+
newValue?.toString()
123+
)
124+
125+
changed
126+
}
127+
128+
SEND_INTERVAL_MAX -> {
129+
val newValue = value?.toString()?.toFloat()?.toInt()
130+
val changed = this.sendIntervalMax != newValue
131+
132+
storage.set(
133+
key,
134+
newValue?.toString()
135+
)
117136

118-
SEND_INTERVAL_MAX -> storage.set(
119-
key,
120-
value?.toString()?.toFloat()?.toInt()?.toString()
121-
)
137+
changed
138+
}
139+
140+
LIMIT_PERIOD -> {
141+
val newValue = value?.let { Period.valueOf(it.toString()) } ?: Period.Disabled
142+
val changed = this.limitPeriod != newValue
143+
144+
storage.set(key, newValue)
145+
146+
changed
147+
}
122148

123-
LIMIT_PERIOD -> storage.set(key, value?.let { Period.valueOf(it.toString()) })
124149
LIMIT_VALUE -> {
125-
val limitValue = value?.toString()?.toInt()
126-
if (limitValue != null && limitValue < 1) {
127-
throw IllegalArgumentException("Limit value must be >= 1")
150+
val limitValue = value?.toString()?.toFloat()?.toInt()
151+
if (limitValue != null && limitValue < 0) {
152+
throw IllegalArgumentException("Limit value must be >= 0")
128153
}
154+
155+
val changed = this.limitValue != (limitValue ?: 0)
156+
129157
storage.set(key, limitValue?.toString())
158+
159+
changed
160+
}
161+
162+
SIM_SELECTION_MODE -> {
163+
val newValue = value?.let { SimSelectionMode.valueOf(it.toString()) }
164+
?: SimSelectionMode.OSDefault
165+
val changed = this.simSelectionMode != newValue
166+
167+
storage.set(key, newValue)
168+
169+
changed
130170
}
131171

132-
SIM_SELECTION_MODE -> storage.set(
133-
key,
134-
value?.let { SimSelectionMode.valueOf(it.toString()) })
172+
PROCESSING_ORDER -> {
173+
val newValue = value?.let { ProcessingOrder.valueOf(it.toString()) }
174+
?: ProcessingOrder.LIFO
175+
val changed = this.processingOrder != newValue
135176

136-
PROCESSING_ORDER -> storage.set(
137-
key,
138-
value?.let { ProcessingOrder.valueOf(it.toString()) })
177+
storage.set(key, newValue)
178+
179+
changed
180+
}
139181

140182
LOG_LIFETIME_DAYS -> {
141-
val logLifetimeDays = value?.toString()?.toInt()
183+
val logLifetimeDays = value?.toString()?.toFloat()?.toInt()
142184
if (logLifetimeDays != null && logLifetimeDays < 1) {
143185
throw IllegalArgumentException("Log lifetime days must be >= 1")
144186
}
187+
188+
val changed = this.logLifetimeDays != logLifetimeDays
145189
storage.set(key, logLifetimeDays?.toString())
190+
191+
changed
146192
}
193+
194+
else -> false
147195
}
148-
}
196+
}.any { it }
149197
}
150198
}

app/src/main/java/me/capcom/smsgateway/modules/ping/PingSettings.kt

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,23 @@ class PingSettings(
2525
)
2626
}
2727

28-
override fun import(data: Map<String, *>) {
29-
data.forEach { (key, value) ->
28+
override fun import(data: Map<String, *>): Boolean {
29+
return data.map { (key, value) ->
3030
when (key) {
31-
INTERVAL_SECONDS -> storage.set(
32-
key,
33-
value?.toString()?.toFloat()?.toInt()?.toString()
34-
)
31+
INTERVAL_SECONDS -> {
32+
val newValue = value?.toString()?.toFloat()?.toInt()
33+
val changed = this.intervalSeconds != newValue
34+
35+
storage.set(
36+
key,
37+
newValue?.toString()
38+
)
39+
40+
changed
41+
}
42+
43+
else -> false
3544
}
36-
}
45+
}.any { it }
3746
}
3847
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package me.capcom.smsgateway.modules.settings
22

33
interface Importer {
4-
fun import(data: Map<String, *>)
4+
fun import(data: Map<String, *>): Boolean
55
}

app/src/main/java/me/capcom/smsgateway/modules/settings/SettingsService.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class SettingsService(
3838
return
3939
}
4040

41-
data.forEach { (key, value) ->
41+
val changed = data.map { (key, value) ->
4242
try {
4343
settings[key]?.let {
4444
(it as? Importer)?.import(value as Map<String, *>)
@@ -48,6 +48,10 @@ class SettingsService(
4848
}
4949
}
5050

51+
if (changed.none { it == true }) {
52+
return
53+
}
54+
5155
notificationsService.notify(
5256
context,
5357
NotificationsService.NOTIFICATION_ID_SETTINGS_CHANGED,

app/src/main/java/me/capcom/smsgateway/modules/webhooks/WebhooksSettings.kt

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,42 @@ class WebhooksSettings(
3636
)
3737
}
3838

39-
override fun import(data: Map<String, *>) {
40-
data.forEach { (key, value) ->
39+
override fun import(data: Map<String, *>): Boolean {
40+
return data.map { (key, value) ->
4141
when (key) {
42-
INTERNET_REQUIRED -> storage.set(key, value?.toString()?.toBoolean())
42+
INTERNET_REQUIRED -> {
43+
val newValue = value?.toString()?.toBoolean()
44+
val changed = this.internetRequired != (newValue ?: true)
45+
46+
storage.set(key, newValue)
47+
48+
changed
49+
}
50+
4351
RETRY_COUNT -> {
44-
val retryCount = value?.toString()?.toInt()
52+
val retryCount = value?.toString()?.toFloat()?.toInt()
4553
if (retryCount != null && retryCount < 1) {
4654
throw IllegalArgumentException("Retry count must be >= 1")
4755
}
56+
57+
val changed = this.retryCount != (retryCount ?: 15)
58+
4859
storage.set(key, retryCount?.toString())
60+
61+
changed
62+
}
63+
64+
SIGNING_KEY -> {
65+
val newValue = value?.toString()
66+
val changed = this.signingKey != newValue
67+
68+
storage.set(key, newValue)
69+
70+
changed
4971
}
5072

51-
SIGNING_KEY -> storage.set(key, value?.toString())
73+
else -> false
5274
}
53-
}
75+
}.any { it }
5476
}
5577
}

0 commit comments

Comments
 (0)