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(