package com.amazonaws.ivs.basicbroadcast.common import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import com.amazonaws.ivs.basicbroadcast.App inline fun getViewModel(noinline owner: (() -> App), noinline creator: (() -> T)? = null): T { return if (creator == null) ViewModelProvider(owner())[T::class.java] else ViewModelProvider(owner(), BaseViewModelFactory(creator))[T::class.java] } inline fun lazyViewModel(noinline owner: (() -> App), noinline creator: (() -> T)? = null) = lazy { getViewModel(owner, creator) } class BaseViewModelFactory(val creator: () -> T) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { @Suppress("UNCHECKED_CAST") return creator() as T } }