Skip to content

Instantly share code, notes, and snippets.

@vipinhelloindia
Last active August 18, 2022 14:36
Show Gist options
  • Save vipinhelloindia/fd49b86c63c576d245e6a9eb6d911576 to your computer and use it in GitHub Desktop.
Save vipinhelloindia/fd49b86c63c576d245e6a9eb6d911576 to your computer and use it in GitHub Desktop.
interface BroadcastSDKEvent {
fun register()
fun unregister()
fun setDeRegisterOnInActive(shouldDeregister: Boolean)
fun getSDKEventLiveData(): LiveData<BroadcastEventModel>
}
class BroadcastEventModel(val intentData: Any) {}
/* This is added to avoid future deprecation for broadcast receiver */
class BroadcastSDKEventManager constructor(
val context: Context
) : BroadcastSDKEvent {
override fun register() {
val filter = IntentFilter().apply {
addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED)
}
LocalBroadcastManager.getInstance(context).registerReceiver(sdkEventReceiver, filter)
}
override fun unregister() {
LocalBroadcastManager.getInstance(context).unregisterReceiver(sdkEventReceiver)
}
override fun setDeRegisterOnInActive(shouldDeregister: Boolean) {
_sdkEventToLiveData.shouldDeregister = shouldDeregister
}
override fun getSDKEventLiveData(): LiveData<BroadcastEventModel> {
return sdkEventToLiveData
}
private var sdkEventReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
sdkEventToLiveData.value = BroadcastEventModel(intent?.data.toEventModel())
}
}
private val _sdkEventToLiveData = SDKEventToLiveData(context, sdkEventReceiver)
private val sdkEventToLiveData: SDKEventToLiveData = _sdkEventToLiveData
class SDKEventToLiveData(
val context: Context?,
private val sdkEventReceiver: BroadcastReceiver
) : MutableLiveData<BroadcastEventModel>() {
var shouldDeregister: Boolean = false
override fun onInactive() {
super.onInactive()
if (shouldDeregister)
context?.let {
LocalBroadcastManager.getInstance(it).unregisterReceiver(sdkEventReceiver)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment