Skip to content

Instantly share code, notes, and snippets.

@uteke
uteke / RxSchedulerExampleViewModelImpl.kt
Last active January 27, 2023 10:36
RxJava3 scheduler abstraction injected into the ViewModel to cover the test cases
class ExampleViewModelImpl(
private val exampleUseCase: ExampleUseCase,
private val schedulerProvider: SchedulerProvider,
initialState: ExampleState = ExampleState(),
) : HelpFaqViewModel(initialState) {
...
exampleUseCase()
.subscribeOn(schedulerProvider.io())
.subscribe {
@uteke
uteke / FragmentViewBindingPropertyDelegate.kt
Created January 27, 2023 10:13
ViewBinding property delegation to ease the usage in Fragment components
import android.view.View
import androidx.fragment.app.Fragment
import androidx.lifecycle.*
import androidx.viewbinding.ViewBinding
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
inline fun <reified VB : ViewBinding> Fragment.viewBinding(
noinline bind: (view: View) -> VB,
) = FragmentViewBindingPropertyDelegate(this, bind)
@uteke
uteke / ActivityViewBindingPropertyDelegate.kt
Last active January 27, 2023 10:12
ViewBinding property delegation to ease the usage in Activity components
import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
inline fun <reified VB : ViewBinding> AppCompatActivity.viewBinding(
noinline bind: (view: View) -> VB,
) = ActivityViewBindingPropertyDelegate(bind)