-
Notifications
You must be signed in to change notification settings - Fork 22
Delegation Example: Log events onStart() and onResume()
Devrath edited this page Feb 28, 2024
·
2 revisions
Code for using the Analytics and Clearing resources
class MainActivity : ComponentActivity(),
IAnalyticsLogger by IAnalyticsLoggerImpl(),
IClearResources by IClearResourcesImpl()
{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ---> We call the method of our AnalyticsLoggerImpl here to register the activity
registerLifeCycleOwner(this)
setContent {
DelegationTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) { Text(text = "Hello") }
}
}
}
override fun onDestroy() {
super.onDestroy()
// ---> We Call our implementation here
clearResources()
}
}
Code for Analytics
interface IAnalyticsLogger {
fun registerLifeCycleOwner(lifecycleOwner: LifecycleOwner)
}
class IAnalyticsLoggerImpl : IAnalyticsLogger, LifecycleEventObserver {
// We call this in our activity and register our activity here
override fun registerLifeCycleOwner(lifecycleOwner: LifecycleOwner) {
lifecycleOwner.lifecycle.addObserver(this)
}
// This is called on event of each of our activity
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when(event) {
Lifecycle.Event.ON_RESUME -> println("Screen is in foreground")
Lifecycle.Event.ON_PAUSE -> println("Screen is not in foreground anymore")
else -> Unit
}
}
}
Code for Clearing resource
interface IClearResources {
fun clearResources()
}
class IClearResourcesImpl : IClearResources {
override fun clearResources() {
println("Resources are cleared!")
}
}