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