Merge changes from topic "kt-has" into androidx-main

* changes:
  Update fragment module with HasDefaultViewModelProviderFactory
  Update navigation module with HasDefaultViewModelProviderFactory
  Convert HasDefaultViewModelProviderFactory to Kotlin
  Rename HasDefaultViewModelProviderFactory.java to .kt
diff --git a/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt b/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
index bfcd4e1..c3f7793 100644
--- a/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
+++ b/activity/activity-ktx/src/androidTest/java/androidx/activity/ActivityViewModelLazyTest.kt
@@ -62,15 +62,15 @@
             super.onCreate(savedInstanceState)
         }
 
-        override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-            return SavedStateViewModelFactory()
-        }
+        override val defaultViewModelProviderFactory
+            get() = SavedStateViewModelFactory()
 
-        override fun getDefaultViewModelCreationExtras(): CreationExtras {
-            val extras = MutableCreationExtras(super.getDefaultViewModelCreationExtras())
-            extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
-            return extras
-        }
+        override val defaultViewModelCreationExtras: CreationExtras
+            get() {
+                val extras = MutableCreationExtras(super.defaultViewModelCreationExtras)
+                extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
+                return extras
+            }
     }
 
     class TestViewModel : ViewModel()
diff --git a/fragment/fragment-ktx/src/androidTest/java/androidx/fragment/app/FragmentViewModelLazyTest.kt b/fragment/fragment-ktx/src/androidTest/java/androidx/fragment/app/FragmentViewModelLazyTest.kt
index 5ab1dda..504a5af 100644
--- a/fragment/fragment-ktx/src/androidTest/java/androidx/fragment/app/FragmentViewModelLazyTest.kt
+++ b/fragment/fragment-ktx/src/androidTest/java/androidx/fragment/app/FragmentViewModelLazyTest.kt
@@ -99,18 +99,17 @@
             enableSavedStateHandles()
         }
 
-        override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-            return SavedStateViewModelFactory()
-        }
+        override val defaultViewModelProviderFactory = SavedStateViewModelFactory()
 
-        override fun getDefaultViewModelCreationExtras(): CreationExtras {
-            val extras = MutableCreationExtras()
-            extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] = application
-            extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
-            extras[VIEW_MODEL_STORE_OWNER_KEY] = this
-            extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
-            return extras
-        }
+        override val defaultViewModelCreationExtras: CreationExtras
+            get() {
+                val extras = MutableCreationExtras()
+                extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] = application
+                extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
+                extras[VIEW_MODEL_STORE_OWNER_KEY] = this
+                extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
+                return extras
+            }
     }
 
     class TestViewModel : ViewModel()
diff --git a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
index c68e779..6a83cf8 100644
--- a/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
+++ b/fragment/fragment/src/androidTest/java/androidx/fragment/app/FragmentViewLifecycleOwnerTest.kt
@@ -183,7 +183,6 @@
     }
 
     public class FragmentWithFactoryOverride : StrictViewFragment() {
-        public override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory =
-            FakeViewModelProviderFactory()
+        public override val defaultViewModelProviderFactory = FakeViewModelProviderFactory()
     }
 }
\ No newline at end of file
diff --git a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
index bc46abe..c067c51 100644
--- a/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
+++ b/lifecycle/lifecycle-viewmodel-compose/src/androidTest/java/androidx/lifecycle/viewmodel/compose/ViewModelTest.kt
@@ -271,5 +271,5 @@
     val factory = FakeViewModelProviderFactory()
 
     override fun getViewModelStore(): ViewModelStore = store
-    override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory = factory
+    override val defaultViewModelProviderFactory = factory
 }
diff --git a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
index c9d5d4e..c139d47 100644
--- a/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
+++ b/lifecycle/lifecycle-viewmodel-savedstate/src/androidTest/java/androidx/lifecycle/viewmodel/savedstate/ViewModelsWithStateTest.kt
@@ -251,14 +251,16 @@
     SavedStateRegistryOwner by ssrOwner,
     HasDefaultViewModelProviderFactory {
 
-    override fun getDefaultViewModelProviderFactory(): Factory {
-        throw UnsupportedOperationException()
-    }
+    override val defaultViewModelProviderFactory: Factory
+        get() {
+            throw UnsupportedOperationException()
+        }
 
-    override fun getDefaultViewModelCreationExtras(): CreationExtras {
-        val extras = MutableCreationExtras()
-        extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
-        extras[VIEW_MODEL_STORE_OWNER_KEY] = this
-        return extras
-    }
+    override val defaultViewModelCreationExtras: CreationExtras
+        get() {
+            val extras = MutableCreationExtras()
+            extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
+            extras[VIEW_MODEL_STORE_OWNER_KEY] = this
+            return extras
+        }
 }
\ No newline at end of file
diff --git a/lifecycle/lifecycle-viewmodel/api/current.txt b/lifecycle/lifecycle-viewmodel/api/current.txt
index e4f76f95..577a5be 100644
--- a/lifecycle/lifecycle-viewmodel/api/current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/current.txt
@@ -9,6 +9,8 @@
   public interface HasDefaultViewModelProviderFactory {
     method public default androidx.lifecycle.viewmodel.CreationExtras getDefaultViewModelCreationExtras();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    property public default androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public abstract androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
   }
 
   public abstract class ViewModel {
diff --git a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
index e4f76f95..577a5be 100644
--- a/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/public_plus_experimental_current.txt
@@ -9,6 +9,8 @@
   public interface HasDefaultViewModelProviderFactory {
     method public default androidx.lifecycle.viewmodel.CreationExtras getDefaultViewModelCreationExtras();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    property public default androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public abstract androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
   }
 
   public abstract class ViewModel {
diff --git a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
index e4f76f95..577a5be 100644
--- a/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
+++ b/lifecycle/lifecycle-viewmodel/api/restricted_current.txt
@@ -9,6 +9,8 @@
   public interface HasDefaultViewModelProviderFactory {
     method public default androidx.lifecycle.viewmodel.CreationExtras getDefaultViewModelCreationExtras();
     method public androidx.lifecycle.ViewModelProvider.Factory getDefaultViewModelProviderFactory();
+    property public default androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public abstract androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
   }
 
   public abstract class ViewModel {
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java
deleted file mode 100644
index ff7539a..0000000
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2019 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.lifecycle;
-
-import androidx.annotation.NonNull;
-import androidx.lifecycle.viewmodel.CreationExtras;
-
-/**
- * Interface that marks a {@link ViewModelStoreOwner} as having a default
- * {@link androidx.lifecycle.ViewModelProvider.Factory} for use with
- * {@link androidx.lifecycle.ViewModelProvider#ViewModelProvider(ViewModelStoreOwner)}.
- */
-public interface HasDefaultViewModelProviderFactory {
-    /**
-     * Returns the default {@link androidx.lifecycle.ViewModelProvider.Factory} that should be
-     * used when no custom {@code Factory} is provided to the
-     * {@link androidx.lifecycle.ViewModelProvider} constructors.
-     *
-     * @return a {@code ViewModelProvider.Factory}
-     */
-    @NonNull
-    ViewModelProvider.Factory getDefaultViewModelProviderFactory();
-
-    /**
-     * Returns the default {@link CreationExtras} that should be passed into the
-     * {@link ViewModelProvider.Factory#create(Class, CreationExtras)} when no overriding
-     * {@link CreationExtras} were passed to the
-     * {@link androidx.lifecycle.ViewModelProvider} constructors.
-     */
-    @NonNull
-    default CreationExtras getDefaultViewModelCreationExtras() {
-        return CreationExtras.Empty.INSTANCE;
-    }
-}
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.kt
new file mode 100644
index 0000000..3a896b1
--- /dev/null
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/HasDefaultViewModelProviderFactory.kt
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package androidx.lifecycle
+
+import androidx.lifecycle.viewmodel.CreationExtras
+
+/**
+ * Interface that marks a [ViewModelStoreOwner] as having a default
+ * [ViewModelProvider.Factory] for use with [ViewModelProvider].
+ */
+interface HasDefaultViewModelProviderFactory {
+    /**
+     * Returns the default [ViewModelProvider.Factory] that should be
+     * used when no custom `Factory` is provided to the
+     * [ViewModelProvider] constructors.
+     */
+    val defaultViewModelProviderFactory: ViewModelProvider.Factory
+
+    /**
+     * Returns the default [CreationExtras] that should be passed into
+     * [ViewModelProvider.Factory.create] when no overriding
+     * [CreationExtras] were passed to the [ViewModelProvider] constructors.
+     */
+    val defaultViewModelCreationExtras: CreationExtras
+        get() = CreationExtras.Empty
+}
\ No newline at end of file
diff --git a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
index 06c9025..ba62b11 100644
--- a/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
+++ b/lifecycle/lifecycle-viewmodel/src/main/java/androidx/lifecycle/ViewModelProvider.kt
@@ -109,7 +109,7 @@
      *
      *
      * This method will use the
-     * [default factory][HasDefaultViewModelProviderFactory.getDefaultViewModelProviderFactory]
+     * [default factory][HasDefaultViewModelProviderFactory.defaultViewModelProviderFactory]
      * if the owner implements [HasDefaultViewModelProviderFactory]. Otherwise, a
      * [NewInstanceFactory] will be used.
      */
diff --git a/lifecycle/lifecycle-viewmodel/src/test/java/androidx/lifecycle/ViewModelProviderTest.kt b/lifecycle/lifecycle-viewmodel/src/test/java/androidx/lifecycle/ViewModelProviderTest.kt
index f4423a9..2536918 100644
--- a/lifecycle/lifecycle-viewmodel/src/test/java/androidx/lifecycle/ViewModelProviderTest.kt
+++ b/lifecycle/lifecycle-viewmodel/src/test/java/androidx/lifecycle/ViewModelProviderTest.kt
@@ -137,9 +137,7 @@
         assertThat(wasCalled[0]).isTrue()
         wasCalled[0] = false
         ViewModelProvider(object : ViewModelStoreOwnerWithCreationExtras() {
-            override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-                return testFactory
-            }
+            override val defaultViewModelProviderFactory = testFactory
         })["customKey", ViewModel1::class.java]
         assertThat(wasCalled[0]).isTrue()
     }
@@ -165,9 +163,7 @@
         assertThat(wasCalled[0]).isTrue()
         wasCalled[0] = false
         ViewModelProvider(object : ViewModelStoreOwnerWithCreationExtras() {
-            override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-                return testFactory
-            }
+            override val defaultViewModelProviderFactory = testFactory
         })["customKey", ViewModel1::class.java]
         assertThat(wasCalled[0]).isTrue()
     }
@@ -180,9 +176,7 @@
             return mStore
         }
 
-        override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-            return mFactory
-        }
+        override val defaultViewModelProviderFactory = mFactory
     }
 
     open class ViewModel1 : ViewModel() {
@@ -204,15 +198,15 @@
     internal open class ViewModelStoreOwnerWithCreationExtras : ViewModelStoreOwner,
         HasDefaultViewModelProviderFactory {
         private val viewModelStore = ViewModelStore()
-        override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-            throw UnsupportedOperationException()
-        }
+        override val defaultViewModelProviderFactory: ViewModelProvider.Factory
+            get() = throw UnsupportedOperationException()
 
-        override fun getDefaultViewModelCreationExtras(): CreationExtras {
-            val extras = MutableCreationExtras()
-            extras[TEST_KEY] = TEST_VALUE
-            return extras
-        }
+        override val defaultViewModelCreationExtras: CreationExtras
+            get() {
+                val extras = MutableCreationExtras()
+                extras[TEST_KEY] = TEST_VALUE
+                return extras
+            }
 
         override fun getViewModelStore(): ViewModelStore {
             return viewModelStore
diff --git a/navigation/navigation-common/api/current.txt b/navigation/navigation-common/api/current.txt
index 2133a87..869f652 100644
--- a/navigation/navigation-common/api/current.txt
+++ b/navigation/navigation-common/api/current.txt
@@ -123,6 +123,8 @@
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     property public final android.os.Bundle? arguments;
+    property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
     property public final androidx.navigation.NavDestination destination;
     property public final String id;
     property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
diff --git a/navigation/navigation-common/api/public_plus_experimental_current.txt b/navigation/navigation-common/api/public_plus_experimental_current.txt
index 2133a87..869f652 100644
--- a/navigation/navigation-common/api/public_plus_experimental_current.txt
+++ b/navigation/navigation-common/api/public_plus_experimental_current.txt
@@ -123,6 +123,8 @@
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     property public final android.os.Bundle? arguments;
+    property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
     property public final androidx.navigation.NavDestination destination;
     property public final String id;
     property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
diff --git a/navigation/navigation-common/api/restricted_current.txt b/navigation/navigation-common/api/restricted_current.txt
index 2133a87..869f652 100644
--- a/navigation/navigation-common/api/restricted_current.txt
+++ b/navigation/navigation-common/api/restricted_current.txt
@@ -123,6 +123,8 @@
     method public androidx.savedstate.SavedStateRegistry getSavedStateRegistry();
     method public androidx.lifecycle.ViewModelStore getViewModelStore();
     property public final android.os.Bundle? arguments;
+    property public androidx.lifecycle.viewmodel.CreationExtras defaultViewModelCreationExtras;
+    property public androidx.lifecycle.ViewModelProvider.Factory defaultViewModelProviderFactory;
     property public final androidx.navigation.NavDestination destination;
     property public final String id;
     property public final androidx.lifecycle.SavedStateHandle savedStateHandle;
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
index a1fe535..3f0656e 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavBackStackEntry.kt
@@ -221,22 +221,21 @@
         return viewModelStoreProvider.getViewModelStore(id)
     }
 
-    public override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-        return defaultFactory
-    }
+    override val defaultViewModelProviderFactory: ViewModelProvider.Factory = defaultFactory
 
-    override fun getDefaultViewModelCreationExtras(): CreationExtras {
-        val extras = MutableCreationExtras()
-        (context?.applicationContext as? Application)?.let { application ->
-            extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] = application
+    override val defaultViewModelCreationExtras: CreationExtras
+        get() {
+            val extras = MutableCreationExtras()
+            (context?.applicationContext as? Application)?.let { application ->
+                extras[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] = application
+            }
+            extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
+            extras[VIEW_MODEL_STORE_OWNER_KEY] = this
+            arguments?.let { args ->
+                extras[DEFAULT_ARGS_KEY] = args
+            }
+            return extras
         }
-        extras[SAVED_STATE_REGISTRY_OWNER_KEY] = this
-        extras[VIEW_MODEL_STORE_OWNER_KEY] = this
-        arguments?.let { args ->
-            extras[DEFAULT_ARGS_KEY] = args
-        }
-        return extras
-    }
 
     override val savedStateRegistry: SavedStateRegistry
         get() = savedStateRegistryController.savedStateRegistry
diff --git a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt
index 07ce168..dbaab04 100644
--- a/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt
+++ b/navigation/navigation-fragment/src/androidTest/java/androidx/navigation/fragment/NavGraphViewModelLazyTest.kt
@@ -30,7 +30,6 @@
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.SavedStateViewModelFactory
 import androidx.lifecycle.ViewModel
-import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.ViewModelStore
 import androidx.lifecycle.viewmodel.CreationExtras
 import androidx.lifecycle.viewmodel.MutableCreationExtras
@@ -279,15 +278,14 @@
         return View(activity)
     }
 
-    override fun getDefaultViewModelProviderFactory(): ViewModelProvider.Factory {
-        return SavedStateViewModelFactory()
-    }
+    override val defaultViewModelProviderFactory = SavedStateViewModelFactory()
 
-    override fun getDefaultViewModelCreationExtras(): CreationExtras {
-        val extras = MutableCreationExtras(super.getDefaultViewModelCreationExtras())
-        extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
-        return extras
-    }
+    override val defaultViewModelCreationExtras: CreationExtras
+        get() {
+            val extras = MutableCreationExtras(super.defaultViewModelCreationExtras)
+            extras[DEFAULT_ARGS_KEY] = bundleOf("test" to "value")
+            return extras
+        }
 }
 
 class TestViewModel : ViewModel()