39 lines
1.4 KiB
Kotlin
39 lines
1.4 KiB
Kotlin
package co.electriccoin.zcash.configuration.internal.intent
|
|
|
|
import android.content.BroadcastReceiver
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
import co.electriccoin.zcash.configuration.model.map.StringConfiguration
|
|
import kotlinx.collections.immutable.toPersistentMap
|
|
import kotlinx.datetime.Clock
|
|
|
|
class IntentConfigurationReceiver : BroadcastReceiver() {
|
|
override fun onReceive(context: Context?, intent: Intent?) {
|
|
intent?.defuse()?.let {
|
|
val key = it.getStringExtra(ConfigurationIntent.EXTRA_STRING_KEY)
|
|
val value = it.getStringExtra(ConfigurationIntent.EXTRA_STRING_VALUE)
|
|
|
|
if (null != key) {
|
|
val existingConfiguration = IntentConfigurationProvider.peekConfiguration().configurationMapping
|
|
val newConfiguration = if (null == value) {
|
|
existingConfiguration.remove(key)
|
|
} else {
|
|
existingConfiguration + (key to value)
|
|
}
|
|
|
|
IntentConfigurationProvider.setConfiguration(StringConfiguration(newConfiguration.toPersistentMap(), Clock.System.now()))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// https://issuetracker.google.com/issues/36927401
|
|
private fun Intent.defuse(): Intent? {
|
|
return try {
|
|
extras?.containsKey(null)
|
|
this
|
|
} catch (@Suppress("SwallowedException", "TooGenericExceptionCaught") e: Exception) {
|
|
null
|
|
}
|
|
}
|