From def9e85fb391bbbca686094d10e6ba3c894752dd Mon Sep 17 00:00:00 2001 From: Marcello Galhardo Date: Fri, 30 Dec 2022 13:10:36 +0000 Subject: [PATCH 1/2] Promote `@Composable retain` to stable --- README.md | 2 +- .../retained/activity/ActivityRetained.kt | 2 +- .../retained/compose/ComposeRetained.kt | 14 ++++++-------- .../dev/marcellogalhardo/retained/core/Retained.kt | 4 ++-- .../retained/core/internal/EagerRetained.kt | 4 ++-- .../retained/core/internal/LazyRetained.kt | 4 ++-- .../retained/fragment/FragmentRetained.kt | 2 +- .../retained/navigation/NavigationRetained.kt | 4 ++-- scripts/publish-module.gradle | 2 +- .../marcellogalhardo/retained/view/ViewRetained.kt | 4 ++-- 10 files changed, 20 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 24ab70d..d4c84f2 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ fun SampleView() { // Using an Activity delegates (stable) val activity: ComponentActivity // find Activity - val viewModel by activity.retain { ViewModel() } + val viewModel by retain(activity) { ViewModel() } // Using a Fragment delegates (stable) val fragment: Fragment // find Fragment diff --git a/activity/src/main/java/dev/marcellogalhardo/retained/activity/ActivityRetained.kt b/activity/src/main/java/dev/marcellogalhardo/retained/activity/ActivityRetained.kt index 22e2d19..ee5fbbd 100644 --- a/activity/src/main/java/dev/marcellogalhardo/retained/activity/ActivityRetained.kt +++ b/activity/src/main/java/dev/marcellogalhardo/retained/activity/ActivityRetained.kt @@ -30,7 +30,7 @@ public inline fun retainInActivity( noinline instantiate: (RetainedEntry) -> T, ): Retained = retain( key = key, - findViewModelStoreOwner = findActivity, + findOwner = findActivity, instantiate = instantiate, ) diff --git a/compose/src/main/java/dev/marcellogalhardo/retained/compose/ComposeRetained.kt b/compose/src/main/java/dev/marcellogalhardo/retained/compose/ComposeRetained.kt index 75499b2..f6cd704 100644 --- a/compose/src/main/java/dev/marcellogalhardo/retained/compose/ComposeRetained.kt +++ b/compose/src/main/java/dev/marcellogalhardo/retained/compose/ComposeRetained.kt @@ -27,10 +27,9 @@ import dev.marcellogalhardo.retained.core.retain * @see retain */ @OptIn(InternalRetainedApi::class) -@ExperimentalRetainedApi @Composable public inline fun retain( - viewModelStoreOwner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) { + owner: ViewModelStoreOwner = checkNotNull(LocalViewModelStoreOwner.current) { "No ViewModelStoreOwner was provided via LocalViewModelStoreOwner" }, key: String = T::class.java.name, @@ -38,14 +37,13 @@ public inline fun retain( ): T = remember(key1 = key) { retain( key = key, - findViewModelStoreOwner = { viewModelStoreOwner }, + findOwner = { owner }, instantiate = instantiate, ).value } /** - * Returns a [Lazy] delegate to access a retained object by **default** scoped to this - * [ComponentActivity]: + * Returns an existing retained instance of [T] scoped to this [ComponentActivity]: * * ``` * @Composable @@ -60,13 +58,13 @@ public inline fun retain( @ExperimentalRetainedApi @Composable public inline fun retainInActivity( - viewModelStoreOwner: ViewModelStoreOwner?, + owner: ViewModelStoreOwner?, key: String = T::class.java.name, noinline instantiate: (RetainedEntry) -> T, ): T = retain( key = key, - viewModelStoreOwner = if (viewModelStoreOwner != null) { - viewModelStoreOwner + owner = if (owner != null) { + owner } else { val context = LocalContext.current remember { context.findActivity() } diff --git a/core/src/main/java/dev/marcellogalhardo/retained/core/Retained.kt b/core/src/main/java/dev/marcellogalhardo/retained/core/Retained.kt index 0250261..61f5a40 100644 --- a/core/src/main/java/dev/marcellogalhardo/retained/core/Retained.kt +++ b/core/src/main/java/dev/marcellogalhardo/retained/core/Retained.kt @@ -49,11 +49,11 @@ public interface Retained : ReadOnlyProperty { @InternalRetainedApi public inline fun retain( key: String = T::class.java.name, - noinline findViewModelStoreOwner: () -> ViewModelStoreOwner, + noinline findOwner: () -> ViewModelStoreOwner, noinline instantiate: (RetainedEntry) -> T, ): Retained = LazyRetained( key = key, retainedClass = T::class, - findViewModelStoreOwner = findViewModelStoreOwner, + findOwner = findOwner, instantiate = instantiate ) diff --git a/core/src/main/java/dev/marcellogalhardo/retained/core/internal/EagerRetained.kt b/core/src/main/java/dev/marcellogalhardo/retained/core/internal/EagerRetained.kt index 6458c4b..a804665 100644 --- a/core/src/main/java/dev/marcellogalhardo/retained/core/internal/EagerRetained.kt +++ b/core/src/main/java/dev/marcellogalhardo/retained/core/internal/EagerRetained.kt @@ -14,13 +14,13 @@ import kotlin.reflect.KProperty internal class EagerRetained( key: String, retainedClass: KClass, - viewModelStoreOwner: ViewModelStoreOwner, + owner: ViewModelStoreOwner, instantiate: (RetainedEntry) -> T, ) : Retained { private val factory = RetainedViewModelFactory(retainedClass, instantiate) - private val provider = ViewModelProvider(viewModelStoreOwner, factory) + private val provider = ViewModelProvider(owner, factory) @Suppress("UNCHECKED_CAST") override val value: T = provider[key, RetainedViewModel::class.java].retainedInstance as T diff --git a/core/src/main/java/dev/marcellogalhardo/retained/core/internal/LazyRetained.kt b/core/src/main/java/dev/marcellogalhardo/retained/core/internal/LazyRetained.kt index 71dc920..d8cc25f 100644 --- a/core/src/main/java/dev/marcellogalhardo/retained/core/internal/LazyRetained.kt +++ b/core/src/main/java/dev/marcellogalhardo/retained/core/internal/LazyRetained.kt @@ -10,7 +10,7 @@ import kotlin.reflect.KProperty internal class LazyRetained( key: String, retainedClass: KClass, - findViewModelStoreOwner: () -> ViewModelStoreOwner, + findOwner: () -> ViewModelStoreOwner, instantiate: (RetainedEntry) -> T, ) : Retained { @@ -18,7 +18,7 @@ internal class LazyRetained( val retained = EagerRetained( key = key, retainedClass = retainedClass, - viewModelStoreOwner = findViewModelStoreOwner(), + owner = findOwner(), instantiate = instantiate ) return@lazy retained.value diff --git a/fragment/src/main/java/dev/marcellogalhardo/retained/fragment/FragmentRetained.kt b/fragment/src/main/java/dev/marcellogalhardo/retained/fragment/FragmentRetained.kt index 56ec8de..2e3f20b 100644 --- a/fragment/src/main/java/dev/marcellogalhardo/retained/fragment/FragmentRetained.kt +++ b/fragment/src/main/java/dev/marcellogalhardo/retained/fragment/FragmentRetained.kt @@ -30,7 +30,7 @@ public inline fun retainInFragment( noinline instantiate: (RetainedEntry) -> T, ): Retained = retain( key = key, - findViewModelStoreOwner = findFragment, + findOwner = findFragment, instantiate = instantiate, ) diff --git a/navigation/src/main/java/dev/marcellogalhardo/retained/navigation/NavigationRetained.kt b/navigation/src/main/java/dev/marcellogalhardo/retained/navigation/NavigationRetained.kt index 6d779c1..116f52a 100644 --- a/navigation/src/main/java/dev/marcellogalhardo/retained/navigation/NavigationRetained.kt +++ b/navigation/src/main/java/dev/marcellogalhardo/retained/navigation/NavigationRetained.kt @@ -24,7 +24,7 @@ public inline fun retainInNavGraph( noinline instantiate: (RetainedEntry) -> T, ): Retained = retain( key = key, - findViewModelStoreOwner = { findNavGraph() }, + findOwner = { findNavGraph() }, instantiate = instantiate, ) @@ -44,6 +44,6 @@ public inline fun NavBackStackEntry.retain( noinline instantiate: (RetainedEntry) -> T, ): Retained = retain( key = key, - findViewModelStoreOwner = { this }, + findOwner = { this }, instantiate = instantiate, ) diff --git a/scripts/publish-module.gradle b/scripts/publish-module.gradle index b894b71..49f2f9d 100644 --- a/scripts/publish-module.gradle +++ b/scripts/publish-module.gradle @@ -3,7 +3,7 @@ apply plugin: 'signing' ext { PUBLISH_GROUP_ID = 'dev.marcellogalhardo' - PUBLISH_VERSION = '0.16.0' + PUBLISH_VERSION = '0.17.0' } task androidSourcesJar(type: Jar) { diff --git a/view/src/main/java/dev/marcellogalhardo/retained/view/ViewRetained.kt b/view/src/main/java/dev/marcellogalhardo/retained/view/ViewRetained.kt index 6708dfe..4592e9f 100644 --- a/view/src/main/java/dev/marcellogalhardo/retained/view/ViewRetained.kt +++ b/view/src/main/java/dev/marcellogalhardo/retained/view/ViewRetained.kt @@ -39,7 +39,7 @@ public inline fun retainInView( ): Retained { return retain( key = key, - findViewModelStoreOwner = { findView().findViewModelStoreOwnerOrThrow() }, + findOwner = { findView().findViewModelStoreOwnerOrThrow() }, instantiate = instantiate, ) } @@ -95,7 +95,7 @@ public inline fun View.retainInActivity( noinline instantiate: (RetainedEntry) -> T, ): Retained = retain( key = key, - findViewModelStoreOwner = { context.findActivity() }, + findOwner = { context.findActivity() }, instantiate = instantiate, ) From d9ffca16ba2d9968ec64f6d507a71ac6c3e9aeac Mon Sep 17 00:00:00 2001 From: Marcello Galhardo Date: Fri, 30 Dec 2022 13:13:40 +0000 Subject: [PATCH 2/2] Update docs --- README.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index d4c84f2..e21809c 100644 --- a/README.md +++ b/README.md @@ -68,25 +68,21 @@ class CounterFragment : Fragment() { } ``` -### Compose Support (stable delegates & experimental API) +### Compose Support ```kotlin @Composable fun SampleView() { - // Experimental API val viewModel = retain { ViewModel() } - // Using an Activity delegates (stable) val activity: ComponentActivity // find Activity - val viewModel by retain(activity) { ViewModel() } + val viewModel by retain(owner = activity) { ViewModel() } - // Using a Fragment delegates (stable) val fragment: Fragment // find Fragment - val viewModel by fragment.retain { ViewModel() } + val viewModel by retain(owner = fragment) { ViewModel() } - // Using NavBackStackEntry delegates (stable) val navBackStackEntry: NavBackStackEntry // find NavBackStackEntry - val viewModel by navBackStackEntry.retain { ViewModel() } + val viewModel by retain(owner = navBackStackEntry) { ViewModel() } } ```