Skip to content

Instantly share code, notes, and snippets.

interface Navigator {
fun startUserDetail(login: String)
fun showSettings()
}
@jraska
jraska / App2.kt
Last active February 16, 2020 20:26
class App : Application()
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(analyticsCallbacks)
registerActivityLifecycleCallbacks(pushCallbacks)
}
// other App code
}
class App : Application()
override fun onCreate() {
super.onCreate()
appComponent.callbacks().forEach { registerActivityLifecycleCallbacks(it) }
}
// ... other App code
}
@Module
class AnalyticsModule {
@Provides
@IntoSet
fun analyticsCallbacks(callbacks: AnalyticsCallbacks): ActivityLifecycleCallbacks = callbacks
}
@Module
class PushModule {
class PushCallbacks(
val pushStream: PushStream
) : Application.ActivityLifecycleCallbacks, PushStream.OnPush {
private var foregroundActivity: Activity? = null
override fun onActivityResumed(activity: Activity) {
foregroundActivity = activity
pushStream.register(this)
}
interface PushStream {
fun register(onPush: OnPush)
fun unregister(onPush: OnPush)
interface OnPush {
fun onPush(push: PushMessage)
}
}
@jraska
jraska / App.kt
Last active February 16, 2020 20:25
class App : Application()
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(analyticsCallbacks)
}
// ... other App code
}
interface Analytics {
fun activityCreated(activity: Activity)
fun activityResumed(activity: Activity)
fun activityPaused(activity: Activity)
fun activityDestroyed(activity: Activity)
}
class AnalyticsCallbacks(
val analytics: Analytics
) : Application.ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = analytics.activityCreated(activity)
override fun onActivityResumed(activity: Activity) = analytics.activityResumed(activity)
override fun onActivityPaused(activity: Activity) = analytics.activityPaused(activity)
class ContactsViewModel(val getContactsUseCase: GetContactsUseCase, parameters: Parameters) : ViewModel() {
private val contactsLiveData: LiveData<Contacts> by lazy {
val liveData = MutableLiveData<Contacts>()
getContactsUseCase.loadContacts(parameters) { liveData.value = it }
return@lazy liveData
}
fun contacts(parameters: Parameters): LiveData<Contacts> = contactsLiveData
}