Convert fragment-ktx+testing to Kotlin Explicit API mode

Explicitly define the visibility and return types for
Kotlin APIs in fragment-ktx and fragment-testing.

Test: ./gradlew checkApi
BUG: 170650359
Change-Id: I9607b05af73e63e2a6bfee9e2c5b5393cbf00d37
diff --git a/fragment/fragment-ktx/build.gradle b/fragment/fragment-ktx/build.gradle
index 597fb21..9932a5c 100644
--- a/fragment/fragment-ktx/build.gradle
+++ b/fragment/fragment-ktx/build.gradle
@@ -61,5 +61,4 @@
     mavenGroup = LibraryGroups.FRAGMENT
     inceptionYear = "2018"
     description = "Kotlin extensions for 'fragment' artifact"
-    legacyDisableKotlinStrictApiMode = true
 }
diff --git a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/Fragment.kt b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/Fragment.kt
index 3393de7..f7a834d 100644
--- a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/Fragment.kt
+++ b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/Fragment.kt
@@ -30,10 +30,9 @@
  * @param result the result to be passed to another fragment or `null` if you want to
  *               clear out any pending result.
  */
-fun Fragment.setFragmentResult(
-    requestKey: String,
-    result: Bundle
-) = parentFragmentManager.setFragmentResult(requestKey, result)
+public fun Fragment.setFragmentResult(requestKey: String, result: Bundle) {
+    parentFragmentManager.setFragmentResult(requestKey, result)
+}
 
 /**
  * Clears the stored result for the given requestKey.
@@ -45,9 +44,9 @@
  *
  * @param requestKey key used to identify the result
  */
-fun Fragment.clearFragmentResult(
-    requestKey: String
-) = parentFragmentManager.clearFragmentResult(requestKey)
+public fun Fragment.clearFragmentResult(requestKey: String) {
+    parentFragmentManager.clearFragmentResult(requestKey)
+}
 
 /**
  * Sets the [FragmentResultListener] for a given [requestKey]. Once this Fragment is
@@ -61,7 +60,7 @@
  * @param listener listener for result changes or `null` to remove any previously
  *                 registered listener.
  */
-fun Fragment.setFragmentResultListener(
+public fun Fragment.setFragmentResultListener(
     requestKey: String,
     listener: ((requestKey: String, bundle: Bundle) -> Unit)
 ) {
@@ -79,6 +78,6 @@
  *
  * @param requestKey key used to identify the result
  */
-fun Fragment.clearFragmentResultListener(
-    requestKey: String
-) = parentFragmentManager.clearFragmentResultListener(requestKey)
+public fun Fragment.clearFragmentResultListener(requestKey: String) {
+    parentFragmentManager.clearFragmentResultListener(requestKey)
+}
diff --git a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentManager.kt b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentManager.kt
index 6dc2a5c..1d4b602 100644
--- a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentManager.kt
+++ b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentManager.kt
@@ -23,7 +23,7 @@
  * The transaction will be completed by calling [FragmentTransaction.commit] unless [allowStateLoss]
  * is set to `true` in which case [FragmentTransaction.commitAllowingStateLoss] will be used.
  */
-inline fun FragmentManager.commit(
+public inline fun FragmentManager.commit(
     allowStateLoss: Boolean = false,
     body: FragmentTransaction.() -> Unit
 ) {
@@ -44,7 +44,7 @@
  * [allowStateLoss] is set to `true` in which case [FragmentTransaction.commitNowAllowingStateLoss]
  * will be used.
  */
-inline fun FragmentManager.commitNow(
+public inline fun FragmentManager.commitNow(
     allowStateLoss: Boolean = false,
     body: FragmentTransaction.() -> Unit
 ) {
@@ -71,7 +71,7 @@
  *     | true  | true             |  commitNowAllowingStateLoss()  |
  */
 @Deprecated("Use commit { .. } or commitNow { .. } extensions")
-inline fun FragmentManager.transaction(
+public inline fun FragmentManager.transaction(
     now: Boolean = false,
     allowStateLoss: Boolean = false,
     body: FragmentTransaction.() -> Unit
diff --git a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentTransaction.kt b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentTransaction.kt
index 514ac91..d523bd5 100644
--- a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentTransaction.kt
+++ b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentTransaction.kt
@@ -36,11 +36,11 @@
  *
  * @return Returns the same [FragmentTransaction] instance.
  */
-inline fun <reified F : Fragment> FragmentTransaction.add(
+public inline fun <reified F : Fragment> FragmentTransaction.add(
     @IdRes containerViewId: Int,
     tag: String? = null,
     args: Bundle? = null
-) = add(containerViewId, F::class.java, args, tag)
+): FragmentTransaction = add(containerViewId, F::class.java, args, tag)
 
 /**
  * Add a fragment to the associated [FragmentManager] without
@@ -55,10 +55,10 @@
  *
  * @return Returns the same [FragmentTransaction] instance.
  */
-inline fun <reified F : Fragment> FragmentTransaction.add(
+public inline fun <reified F : Fragment> FragmentTransaction.add(
     tag: String,
     args: Bundle? = null
-) = add(F::class.java, args, tag)
+): FragmentTransaction = add(F::class.java, args, tag)
 
 /**
  * Replace an existing fragment that was added to a container.  This is
@@ -77,8 +77,8 @@
  *
  * @return Returns the same [FragmentTransaction] instance.
  */
-inline fun <reified F : Fragment> FragmentTransaction.replace(
+public inline fun <reified F : Fragment> FragmentTransaction.replace(
     @IdRes containerViewId: Int,
     tag: String? = null,
     args: Bundle? = null
-) = replace(containerViewId, F::class.java, args, tag)
+): FragmentTransaction = replace(containerViewId, F::class.java, args, tag)
diff --git a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentViewModelLazy.kt b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentViewModelLazy.kt
index 45b5a1d..b81cd83 100644
--- a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentViewModelLazy.kt
+++ b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/FragmentViewModelLazy.kt
@@ -52,10 +52,10 @@
  * [Fragment.onAttach()], and access prior to that will result in IllegalArgumentException.
  */
 @MainThread
-inline fun <reified VM : ViewModel> Fragment.viewModels(
+public inline fun <reified VM : ViewModel> Fragment.viewModels(
     noinline ownerProducer: () -> ViewModelStoreOwner = { this },
     noinline factoryProducer: (() -> Factory)? = null
-) = createViewModelLazy(VM::class, { ownerProducer().viewModelStore }, factoryProducer)
+): Lazy<VM> = createViewModelLazy(VM::class, { ownerProducer().viewModelStore }, factoryProducer)
 
 /**
  * Returns a property delegate to access parent activity's [ViewModel],
@@ -74,9 +74,9 @@
  * [Fragment.onAttach()], and access prior to that will result in IllegalArgumentException.
  */
 @MainThread
-inline fun <reified VM : ViewModel> Fragment.activityViewModels(
+public inline fun <reified VM : ViewModel> Fragment.activityViewModels(
     noinline factoryProducer: (() -> Factory)? = null
-) = createViewModelLazy(
+): Lazy<VM> = createViewModelLazy(
     VM::class, { requireActivity().viewModelStore },
     factoryProducer ?: { requireActivity().defaultViewModelProviderFactory }
 )
@@ -86,7 +86,7 @@
  * to default factory.
  */
 @MainThread
-fun <VM : ViewModel> Fragment.createViewModelLazy(
+public fun <VM : ViewModel> Fragment.createViewModelLazy(
     viewModelClass: KClass<VM>,
     storeProducer: () -> ViewModelStore,
     factoryProducer: (() -> Factory)? = null
diff --git a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/View.kt b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/View.kt
index 63ae98f..80858ef 100644
--- a/fragment/fragment-ktx/src/main/java/androidx/fragment/app/View.kt
+++ b/fragment/fragment-ktx/src/main/java/androidx/fragment/app/View.kt
@@ -27,4 +27,4 @@
  * Calling this on a View that does not have a Fragment set will result in an
  * [IllegalStateException]
  */
-fun <F : Fragment> View.findFragment(): F = FragmentManager.findFragment(this)
+public fun <F : Fragment> View.findFragment(): F = FragmentManager.findFragment(this)
diff --git a/fragment/fragment-testing/build.gradle b/fragment/fragment-testing/build.gradle
index d9253a1..40ec1b2 100644
--- a/fragment/fragment-testing/build.gradle
+++ b/fragment/fragment-testing/build.gradle
@@ -48,5 +48,4 @@
     mavenGroup = LibraryGroups.FRAGMENT
     inceptionYear = "2018"
     description = "Extensions for testing 'fragment' artifact"
-    legacyDisableKotlinStrictApiMode = true
 }
diff --git a/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt b/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
index 75b33cd..d8694ad 100644
--- a/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
+++ b/fragment/fragment-testing/src/main/java/androidx/fragment/app/testing/FragmentScenario.kt
@@ -28,21 +28,24 @@
     "Superseded by launchFragment that takes an initialState",
     level = DeprecationLevel.HIDDEN
 ) // Binary API compatibility.
-inline fun <reified F : Fragment> launchFragment(
+public inline fun <reified F : Fragment> launchFragment(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     factory: FragmentFactory? = null
-) = launchFragment<F>(fragmentArgs, themeResId, Lifecycle.State.RESUMED, factory)
+): FragmentScenario<F> = launchFragment(
+    fragmentArgs, themeResId, Lifecycle.State.RESUMED,
+    factory
+)
 
 @Deprecated(
     "Superseded by launchFragment that takes an initialState",
     level = DeprecationLevel.HIDDEN
 ) // Binary API compatibility.
-inline fun <reified F : Fragment> launchFragment(
+public inline fun <reified F : Fragment> launchFragment(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     crossinline instantiate: () -> F
-) = launchFragment(fragmentArgs, themeResId) {
+): FragmentScenario<F> = launchFragment(fragmentArgs, themeResId) {
     instantiate()
 }
 
@@ -50,21 +53,24 @@
     "Superseded by launchFragmentInContainer that takes an initialState",
     level = DeprecationLevel.HIDDEN
 ) // Binary API compatibility.
-inline fun <reified F : Fragment> launchFragmentInContainer(
+public inline fun <reified F : Fragment> launchFragmentInContainer(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     factory: FragmentFactory? = null
-) = launchFragmentInContainer<F>(fragmentArgs, themeResId, Lifecycle.State.RESUMED, factory)
+): FragmentScenario<F> = launchFragmentInContainer(
+    fragmentArgs, themeResId, Lifecycle.State.RESUMED,
+    factory
+)
 
 @Deprecated(
     "Superseded by launchFragmentInContainer that takes an initialState",
     level = DeprecationLevel.HIDDEN
 ) // Binary API compatibility.
-inline fun <reified F : Fragment> launchFragmentInContainer(
+public inline fun <reified F : Fragment> launchFragmentInContainer(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     crossinline instantiate: () -> F
-) = launchFragmentInContainer(fragmentArgs, themeResId) {
+): FragmentScenario<F> = launchFragmentInContainer(fragmentArgs, themeResId) {
     instantiate()
 }
 
@@ -80,12 +86,15 @@
  * [Lifecycle.State.CREATED], [Lifecycle.State.STARTED], or [Lifecycle.State.RESUMED].
  * @param factory a fragment factory to use or null to use default factory
  */
-inline fun <reified F : Fragment> launchFragment(
+public inline fun <reified F : Fragment> launchFragment(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     initialState: Lifecycle.State = Lifecycle.State.RESUMED,
     factory: FragmentFactory? = null
-) = FragmentScenario.launch(F::class.java, fragmentArgs, themeResId, initialState, factory)
+): FragmentScenario<F> = FragmentScenario.launch(
+    F::class.java, fragmentArgs, themeResId, initialState,
+    factory
+)
 
 /**
  * Launches a Fragment with given arguments hosted by an empty [FragmentActivity] using
@@ -99,12 +108,12 @@
  * [Lifecycle.State.CREATED], [Lifecycle.State.STARTED], or [Lifecycle.State.RESUMED].
  * @param instantiate method which will be used to instantiate the Fragment.
  */
-inline fun <reified F : Fragment> launchFragment(
+public inline fun <reified F : Fragment> launchFragment(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     initialState: Lifecycle.State = Lifecycle.State.RESUMED,
     crossinline instantiate: () -> F
-) = FragmentScenario.launch(
+): FragmentScenario<F> = FragmentScenario.launch(
     F::class.java, fragmentArgs, themeResId, initialState,
     object : FragmentFactory() {
         override fun instantiate(
@@ -129,12 +138,12 @@
  * [Lifecycle.State.CREATED], [Lifecycle.State.STARTED], or [Lifecycle.State.RESUMED].
  * @param factory a fragment factory to use or null to use default factory
  */
-inline fun <reified F : Fragment> launchFragmentInContainer(
+public inline fun <reified F : Fragment> launchFragmentInContainer(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     initialState: Lifecycle.State = Lifecycle.State.RESUMED,
     factory: FragmentFactory? = null
-) = FragmentScenario.launchInContainer(
+): FragmentScenario<F> = FragmentScenario.launchInContainer(
     F::class.java, fragmentArgs, themeResId, initialState,
     factory
 )
@@ -154,12 +163,12 @@
  * simplification of the [FragmentFactory] interface for cases where only a single class
  * needs a custom constructor called.
  */
-inline fun <reified F : Fragment> launchFragmentInContainer(
+public inline fun <reified F : Fragment> launchFragmentInContainer(
     fragmentArgs: Bundle? = null,
     @StyleRes themeResId: Int = R.style.FragmentScenarioEmptyFragmentActivityTheme,
     initialState: Lifecycle.State = Lifecycle.State.RESUMED,
     crossinline instantiate: () -> F
-) = FragmentScenario.launchInContainer(
+): FragmentScenario<F> = FragmentScenario.launchInContainer(
     F::class.java, fragmentArgs, themeResId, initialState,
     object : FragmentFactory() {
         override fun instantiate(
@@ -178,7 +187,7 @@
  * If any exceptions are raised while running [block], they are rethrown.
  */
 @SuppressWarnings("DocumentExceptions")
-inline fun <reified F : Fragment, T : Any> FragmentScenario<F>.withFragment(
+public inline fun <reified F : Fragment, T : Any> FragmentScenario<F>.withFragment(
     crossinline block: F.() -> T
 ): T {
     lateinit var value: T