47 lines
1.5 KiB
Kotlin
47 lines
1.5 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
|
|
}
|
|
}
|