Add `NewInstanceFactory` to `ViewModelProvider.desktop`
Fixes: b/349884804
Test: manual
Change-Id: Id8f5dc3d5214e6c88ede432c34474c1f97d95990
diff --git a/lifecycle/lifecycle-viewmodel/src/desktopMain/kotlin/androidx/lifecycle/ViewModelProvider.desktop.kt b/lifecycle/lifecycle-viewmodel/src/desktopMain/kotlin/androidx/lifecycle/ViewModelProvider.desktop.kt
index 2b7ea54..f2833cc 100644
--- a/lifecycle/lifecycle-viewmodel/src/desktopMain/kotlin/androidx/lifecycle/ViewModelProvider.desktop.kt
+++ b/lifecycle/lifecycle-viewmodel/src/desktopMain/kotlin/androidx/lifecycle/ViewModelProvider.desktop.kt
@@ -19,7 +19,9 @@
import androidx.annotation.MainThread
import androidx.annotation.RestrictTo
import androidx.lifecycle.viewmodel.CreationExtras
+import androidx.lifecycle.viewmodel.CreationExtras.Key
import androidx.lifecycle.viewmodel.ViewModelProviderImpl
+import androidx.lifecycle.viewmodel.internal.JvmViewModelProviders
import androidx.lifecycle.viewmodel.internal.ViewModelProviders
import kotlin.reflect.KClass
@@ -50,6 +52,41 @@
public actual open fun onRequery(viewModel: ViewModel) {}
}
+ /** Simple factory, which calls empty constructor on the give class. */
+ public open class NewInstanceFactory
+ /**
+ * Construct a new [NewInstanceFactory] instance.
+ *
+ * Use [NewInstanceFactory.instance] to get a default instance of [NewInstanceFactory].
+ */
+ @Suppress("SingletonConstructor")
+ constructor() : Factory {
+
+ public override fun create(
+ modelClass: KClass,
+ extras: CreationExtras,
+ ): T = JvmViewModelProviders.createViewModel(modelClass.java)
+
+ public companion object {
+ private var _instance: NewInstanceFactory? = null
+
+ /**
+ * Retrieve a singleton instance of NewInstanceFactory.
+ *
+ * @return A valid [NewInstanceFactory]
+ */
+ @JvmStatic
+ public val instance: NewInstanceFactory
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ get() {
+ if (_instance == null) {
+ _instance = NewInstanceFactory()
+ }
+ return _instance!!
+ }
+ }
+ }
+
public actual companion object {
@JvmStatic
public actual fun create(