Last active
August 18, 2022 14:36
-
-
Save vipinhelloindia/fd49b86c63c576d245e6a9eb6d911576 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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