Upgraded a bunch of dependencies (#2382)
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index 217e5c5..f8467b4 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="KotlinJpsPluginSettings"> - <option name="version" value="1.8.21" /> + <option name="version" value="1.9.10" /> </component> </project> \ No newline at end of file
diff --git a/build.gradle b/build.gradle index a26b100..c923c31 100644 --- a/build.gradle +++ b/build.gradle
@@ -2,10 +2,10 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { + id "com.android.tools.build" apply false id 'net.ltgt.errorprone' apply false id "com.google.devtools.ksp" apply false id "org.ajoberstar.grgit" apply false - id "com.android.library" apply false id "org.jetbrains.kotlin.jvm" apply false id "com.vanniktech.maven.publish" apply false id "org.jetbrains.dokka" apply false @@ -13,7 +13,7 @@ allprojects { def compileJavaVersion = JavaVersion.VERSION_17 - def targetJavaVersion = JavaVersion.VERSION_1_8 + def targetJavaVersion = JavaVersion.VERSION_17 pluginManager.withPlugin("java") { java { toolchain {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9fcf0d7..859b55b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml
@@ -4,6 +4,7 @@ androidx-activity-compose = "androidx.activity:activity-compose:_" androidx-appcompat = "androidx.appcompat:appcompat:_" +androidx-fragment = "androidx.fragment:fragment-ktx:_" androidx-browser = "androidx.browser:browser:_" androidx-cardview = "androidx.cardview:cardview:_" androidx-collection-ktx = "androidx.collection:collection:_"
diff --git a/issue-repro-compose/build.gradle b/issue-repro-compose/build.gradle index 4f5a631..ff49721 100755 --- a/issue-repro-compose/build.gradle +++ b/issue-repro-compose/build.gradle
@@ -7,11 +7,11 @@ android { namespace 'com.airbnb.lottie.issues.compose' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.airbnb.lottie.issues.compose" minSdk 21 - targetSdk 33 + targetSdk 34 versionCode 1 versionName "1.0" }
diff --git a/issue-repro/build.gradle b/issue-repro/build.gradle index 2ce7bf5..73c77a0 100755 --- a/issue-repro/build.gradle +++ b/issue-repro/build.gradle
@@ -5,11 +5,11 @@ android { namespace 'com.airbnb.lottie.issues' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.airbnb.lottie.issues" minSdk 16 - targetSdk 33 + targetSdk 34 versionCode 1 versionName "1.0" }
diff --git a/lottie-compose/build.gradle b/lottie-compose/build.gradle index 0e8e427..099aa04 100644 --- a/lottie-compose/build.gradle +++ b/lottie-compose/build.gradle
@@ -9,10 +9,10 @@ android { namespace 'com.airbnb.lottie.compose' - compileSdk 33 + compileSdk 34 defaultConfig { minSdk 21 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } buildTypes { @@ -50,4 +50,4 @@ testImplementation libs.junit4 androidTestImplementation libs.androidx.test.junit androidTestImplementation libs.androidx.test.espresso -} \ No newline at end of file +}
diff --git a/lottie/build.gradle b/lottie/build.gradle index 596eb44..3c18376 100644 --- a/lottie/build.gradle +++ b/lottie/build.gradle
@@ -10,10 +10,10 @@ android { namespace 'com.airbnb.lottie' resourcePrefix 'lottie_' - compileSdk 33 + compileSdk 34 defaultConfig { minSdk 16 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } lintOptions {
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java index 8234e74..d288528 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -33,7 +33,6 @@ import androidx.annotation.RestrictTo; import com.airbnb.lottie.animation.LPaint; -import com.airbnb.lottie.animation.keyframe.PathKeyframe; import com.airbnb.lottie.manager.FontAssetManager; import com.airbnb.lottie.manager.ImageAssetManager; import com.airbnb.lottie.model.Font; @@ -336,7 +335,7 @@ * Be wary if you are using many images, however. Lottie is designed to work with vector shapes * from After Effects. If your images look like they could be represented with vector shapes, * see if it is possible to convert them to shape layers and re-export your animation. Check - * the documentation at http://airbnb.io/lottie for more information about importing shapes from + * the documentation at <a href="http://airbnb.io/lottie">airbnb.io/lottie</a> for more information about importing shapes from * Sketch or Illustrator to avoid this. */ public void setImagesAssetsFolder(@Nullable String imageAssetsFolder) { @@ -460,7 +459,7 @@ * <p/> * Sets the current value for {@link AsyncUpdates}. Refer to the docs for {@link AsyncUpdates} for more info. */ - public void setAsyncUpdates(AsyncUpdates asyncUpdates) { + public void setAsyncUpdates(@Nullable AsyncUpdates asyncUpdates) { this.asyncUpdates = asyncUpdates; } @@ -1318,7 +1317,7 @@ * <p> * Internally, this will check if the {@link KeyPath} has already been resolved with * {@link #resolveKeyPath(KeyPath)} and will resolve it if it hasn't. - * + * <p> * Set the callback to null to clear it. */ public <T> void addValueCallback(
diff --git a/sample-compose-benchmark/build.gradle b/sample-compose-benchmark/build.gradle index a83accd..df2da67 100644 --- a/sample-compose-benchmark/build.gradle +++ b/sample-compose-benchmark/build.gradle
@@ -5,7 +5,7 @@ android { namespace 'com.airbnb.lottie.sample.compose.benchmark' - compileSdk 33 + compileSdk 34 kotlinOptions { freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" @@ -13,7 +13,7 @@ defaultConfig { minSdk 30 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" }
diff --git a/sample-compose/build.gradle b/sample-compose/build.gradle index abaacad..279dd7e 100644 --- a/sample-compose/build.gradle +++ b/sample-compose/build.gradle
@@ -8,11 +8,11 @@ android { namespace 'com.airbnb.lottie.sample.compose' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.airbnb.lottie.sample.compose" minSdk 21 - targetSdk 33 + targetSdk 34 versionCode 1 versionName VERSION_NAME testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ViewPagerExample.kt b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ViewPagerExample.kt index c05b47a..ab8dba3 100644 --- a/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ViewPagerExample.kt +++ b/sample-compose/src/main/java/com/airbnb/lottie/sample/compose/examples/ViewPagerExample.kt
@@ -20,19 +20,16 @@ @Composable fun ViewPagerExamplePage() { val colors = listOf(Color.Red, Color.Green, Color.Blue, Color.Magenta) - val pagerState = rememberPagerState() + val pagerState = rememberPagerState { colors.size } Box( modifier = Modifier - .fillMaxSize() + .fillMaxSize(), ) { - HorizontalPager( - colors.size, - state = pagerState - ) { page -> + HorizontalPager(pagerState) { page -> Box( modifier = Modifier .fillMaxSize() - .background(colors[page]) + .background(colors[page]), ) } WalkthroughAnimation(pagerState, colors.size) @@ -47,6 +44,6 @@ composition, { progress }, modifier = Modifier - .fillMaxSize() + .fillMaxSize(), ) -} \ No newline at end of file +}
diff --git a/sample/build.gradle b/sample/build.gradle index aee9b6d..54dc7b5 100644 --- a/sample/build.gradle +++ b/sample/build.gradle
@@ -9,11 +9,11 @@ android { namespace 'com.airbnb.lottie.samples' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.airbnb.lottie" minSdk 16 - targetSdk 33 + targetSdk 34 versionCode 70 versionName VERSION_NAME multiDexEnabled true @@ -58,6 +58,7 @@ implementation libs.androidx.multidex implementation libs.androidx.appcompat + implementation libs.androidx.fragment implementation libs.androidx.recyclerview implementation libs.androidx.paging.runtime.ktx implementation libs.androidx.viewmodel.ktx @@ -69,7 +70,7 @@ implementation libs.epoxy ksp libs.epoxy.processor - implementation libs.mvrx + implementation libs.mavericks implementation libs.kotlinx.coroutines.android implementation libs.qrcodereaderview
diff --git a/sample/src/main/assets/fonts/Comic Neue.ttf b/sample/src/main/assets/fonts/Comic Neue.ttf new file mode 100755 index 0000000..ab3a417 --- /dev/null +++ b/sample/src/main/assets/fonts/Comic Neue.ttf Binary files differ
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/LottieApplication.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/LottieApplication.kt index 9ea95a4..fcc7f4b 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/LottieApplication.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/LottieApplication.kt
@@ -3,6 +3,7 @@ import androidx.multidex.MultiDexApplication import com.airbnb.lottie.L import com.airbnb.lottie.samples.api.LottiefilesApi +import com.airbnb.mvrx.Mavericks import com.google.gson.FieldNamingPolicy import com.google.gson.GsonBuilder import okhttp3.OkHttpClient @@ -37,6 +38,7 @@ override fun onCreate() { super.onCreate() + Mavericks.initialize(this) L.DBG = true } -} \ No newline at end of file +}
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt index 387ba18..c88d210 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
@@ -5,8 +5,8 @@ import android.view.View import android.view.ViewGroup import androidx.core.view.isVisible +import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope -import androidx.lifecycle.viewModelScope import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingDataAdapter @@ -20,13 +20,14 @@ import com.airbnb.lottie.samples.model.AnimationData import com.airbnb.lottie.samples.model.AnimationResponse import com.airbnb.lottie.samples.model.CompositionArgs -import com.airbnb.lottie.samples.utils.MvRxViewModel +import com.airbnb.lottie.samples.utils.BaseFragment import com.airbnb.lottie.samples.utils.hideKeyboard import com.airbnb.lottie.samples.utils.viewBinding import com.airbnb.lottie.samples.views.AnimationItemView -import com.airbnb.mvrx.BaseMvRxFragment -import com.airbnb.mvrx.MvRxState -import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.MavericksState +import com.airbnb.mvrx.MavericksView +import com.airbnb.mvrx.MavericksViewModel +import com.airbnb.mvrx.MavericksViewModelFactory import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState @@ -38,9 +39,9 @@ data class LottiefilesState( val mode: LottiefilesMode = LottiefilesMode.Recent, val query: String = "" -) : MvRxState +) : MavericksState -class LottiefilesViewModel(initialState: LottiefilesState, private val api: LottiefilesApi) : MvRxViewModel<LottiefilesState>(initialState) { +class LottiefilesViewModel(initialState: LottiefilesState, private val api: LottiefilesApi) : MavericksViewModel<LottiefilesState>(initialState) { private var mode = initialState.mode private var query = initialState.query @@ -51,7 +52,7 @@ }.flow.cachedIn(viewModelScope) init { - selectSubscribe(LottiefilesState::mode, LottiefilesState::query) { mode, query -> + onEach(LottiefilesState::mode, LottiefilesState::query) { mode, query -> this.mode = mode this.query = query dataSource?.invalidate() @@ -62,7 +63,7 @@ fun setQuery(query: String) = setState { copy(query = query) } - companion object : MvRxViewModelFactory<LottiefilesViewModel, LottiefilesState> { + companion object : MavericksViewModelFactory<LottiefilesViewModel, LottiefilesState> { override fun create(viewModelContext: ViewModelContext, state: LottiefilesState): LottiefilesViewModel { val service = viewModelContext.app<LottieApplication>().lottiefilesService return LottiefilesViewModel(state, service) @@ -109,7 +110,7 @@ } } -class LottiefilesFragment : BaseMvRxFragment(R.layout.lottiefiles_fragment) { +class LottiefilesFragment : BaseFragment(R.layout.lottiefiles_fragment) { private val binding: LottiefilesFragmentBinding by viewBinding() private val viewModel: LottiefilesViewModel by fragmentViewModel()
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt index ed279ae..f56c3d8 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerFragment.kt
@@ -32,12 +32,12 @@ import com.airbnb.lottie.model.KeyPath import com.airbnb.lottie.samples.databinding.PlayerFragmentBinding import com.airbnb.lottie.samples.model.CompositionArgs +import com.airbnb.lottie.samples.utils.BaseFragment import com.airbnb.lottie.samples.utils.getParcelableCompat import com.airbnb.lottie.samples.utils.viewBinding import com.airbnb.lottie.samples.views.BottomSheetItemView import com.airbnb.lottie.samples.views.BottomSheetItemViewModel_ import com.airbnb.lottie.samples.views.ControlBarItemToggleView -import com.airbnb.mvrx.BaseMvRxFragment import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import com.github.mikephil.charting.components.LimitLine @@ -50,7 +50,7 @@ import kotlin.math.abs import kotlin.math.roundToInt -class PlayerFragment : BaseMvRxFragment(R.layout.player_fragment) { +class PlayerFragment : BaseFragment(R.layout.player_fragment) { private val binding: PlayerFragmentBinding by viewBinding() private val viewModel: PlayerViewModel by fragmentViewModel() @@ -147,7 +147,7 @@ binding.controlBarTrim.minFrameView.setOnClickListener { showMinFrameDialog() } binding.controlBarTrim.maxFrameView.setOnClickListener { showMaxFrameDialog() } - viewModel.selectSubscribe(PlayerState::minFrame, PlayerState::maxFrame) { minFrame, maxFrame -> + viewModel.onEach(PlayerState::minFrame, PlayerState::maxFrame) { minFrame, maxFrame -> binding.animationView.setMinAndMaxFrame(minFrame, maxFrame) // I think this is a lint bug. It complains about int being <ErrorType> //noinspection StringFormatMatches @@ -157,7 +157,7 @@ } viewModel.fetchAnimation(args) - viewModel.asyncSubscribe(PlayerState::composition, onFail = { + viewModel.onAsync(PlayerState::composition, onFail = { Snackbar.make(binding.coordinatorLayout, R.string.composition_load_error, Snackbar.LENGTH_LONG).show() Log.w(L.TAG, "Error loading composition.", it) }) { @@ -166,7 +166,7 @@ } binding.controlBar.borderToggle.setOnClickListener { viewModel.toggleBorderVisible() } - viewModel.selectSubscribe(PlayerState::borderVisible) { + viewModel.onEach(PlayerState::borderVisible) { binding.controlBar.borderToggle.isActivated = it binding.controlBar.borderToggle.setImageResource( if (it) R.drawable.ic_border_on @@ -191,12 +191,12 @@ binding.controlBar.enableApplyingOpacityToLayers.isActivated = isApplyingOpacityToLayersEnabled } - viewModel.selectSubscribe(PlayerState::controlsVisible) { binding.controlBarPlayerControls.controlsContainer.animateVisible(it) } + viewModel.onEach(PlayerState::controlsVisible) { binding.controlBarPlayerControls.controlsContainer.animateVisible(it) } - viewModel.selectSubscribe(PlayerState::controlBarVisible) { binding.controlBar.root.animateVisible(it) } + viewModel.onEach(PlayerState::controlBarVisible) { binding.controlBar.root.animateVisible(it) } binding.controlBar.renderGraphToggle.setOnClickListener { viewModel.toggleRenderGraphVisible() } - viewModel.selectSubscribe(PlayerState::renderGraphVisible) { + viewModel.onEach(PlayerState::renderGraphVisible) { binding.controlBar.renderGraphToggle.isActivated = it binding.controlBarPlayerControls.renderTimesGraphContainer.animateVisible(it) binding.controlBarPlayerControls.renderTimesPerLayerButton.animateVisible(it) @@ -204,38 +204,38 @@ } binding.controlBar.masksAndMattesToggle.setOnClickListener { viewModel.toggleOutlineMasksAndMattes() } - viewModel.selectSubscribe(PlayerState::outlineMasksAndMattes) { + viewModel.onEach(PlayerState::outlineMasksAndMattes) { binding.controlBar.masksAndMattesToggle.isActivated = it binding.animationView.setOutlineMasksAndMattes(it) } binding.controlBar.backgroundColorToggle.setOnClickListener { viewModel.toggleBackgroundColorVisible() } binding.controlBarBackgroundColor.closeBackgroundColorButton.setOnClickListener { viewModel.setBackgroundColorVisible(false) } - viewModel.selectSubscribe(PlayerState::backgroundColorVisible) { + viewModel.onEach(PlayerState::backgroundColorVisible) { binding.controlBar.backgroundColorToggle.isActivated = it binding.controlBarBackgroundColor.backgroundColorContainer.animateVisible(it) } binding.controlBar.trimToggle.setOnClickListener { viewModel.toggleTrimVisible() } binding.controlBarTrim.closeTrimButton.setOnClickListener { viewModel.setTrimVisible(false) } - viewModel.selectSubscribe(PlayerState::trimVisible) { + viewModel.onEach(PlayerState::trimVisible) { binding.controlBar.trimToggle.isActivated = it binding.controlBarTrim.trimContainer.animateVisible(it) } binding.controlBar.mergePathsToggle.setOnClickListener { viewModel.toggleMergePaths() } - viewModel.selectSubscribe(PlayerState::useMergePaths) { + viewModel.onEach(PlayerState::useMergePaths) { binding.animationView.enableMergePathsForKitKatAndAbove(it) binding.controlBar.mergePathsToggle.isActivated = it } binding.controlBar.speedToggle.setOnClickListener { viewModel.toggleSpeedVisible() } binding.controlBarSpeed.closeSpeedButton.setOnClickListener { viewModel.setSpeedVisible(false) } - viewModel.selectSubscribe(PlayerState::speedVisible) { + viewModel.onEach(PlayerState::speedVisible) { binding.controlBar.speedToggle.isActivated = it binding.controlBarSpeed.speedContainer.isVisible = it } - viewModel.selectSubscribe(PlayerState::speed) { + viewModel.onEach(PlayerState::speed) { binding.animationView.speed = it binding.controlBarSpeed.speedButtonsContainer .children @@ -259,7 +259,7 @@ binding.controlBarPlayerControls.loopButton.setOnClickListener { viewModel.toggleLoop() } - viewModel.selectSubscribe(PlayerState::repeatCount) { + viewModel.onEach(PlayerState::repeatCount) { binding.animationView.repeatCount = it binding.controlBarPlayerControls.loopButton.isActivated = binding.animationView.repeatCount == ValueAnimator.INFINITE }
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt index 592573e..31a6972 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/PlayerViewModel.kt
@@ -7,11 +7,11 @@ import com.airbnb.lottie.LottieCompositionFactory import com.airbnb.lottie.LottieTask import com.airbnb.lottie.samples.model.CompositionArgs -import com.airbnb.lottie.samples.utils.MvRxViewModel import com.airbnb.mvrx.Async import com.airbnb.mvrx.Fail -import com.airbnb.mvrx.MvRxState -import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.MavericksState +import com.airbnb.mvrx.MavericksViewModel +import com.airbnb.mvrx.MavericksViewModelFactory import com.airbnb.mvrx.Success import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext @@ -34,12 +34,12 @@ val maxFrame: Int = 0, val speed: Float = 1f, val repeatCount: Int = ValueAnimator.INFINITE -) : MvRxState +) : MavericksState class PlayerViewModel( initialState: PlayerState, private val application: Application -) : MvRxViewModel<PlayerState>(initialState) { +) : MavericksViewModel<PlayerState>(initialState) { fun fetchAnimation(args: CompositionArgs) { val url = args.url ?: args.animationDataV2?.file ?: args.animationData?.lottieLink @@ -112,9 +112,9 @@ ) } - companion object : MvRxViewModelFactory<PlayerViewModel, PlayerState> { + companion object : MavericksViewModelFactory<PlayerViewModel, PlayerState> { override fun create(viewModelContext: ViewModelContext, state: PlayerState): PlayerViewModel { return PlayerViewModel(state, viewModelContext.app()) } } -} \ No newline at end of file +}
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt index 96b4f09..ebeb2c9 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/PreviewFragment.kt
@@ -115,4 +115,4 @@ } } } -} \ No newline at end of file +}
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt index 8a58ccc..f404d7f 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt
@@ -1,5 +1,6 @@ package com.airbnb.lottie.samples +import android.app.Activity import android.content.Intent import com.airbnb.epoxy.EpoxyController import com.airbnb.lottie.samples.api.LottiefilesApi @@ -7,29 +8,29 @@ import com.airbnb.lottie.samples.model.CompositionArgs import com.airbnb.lottie.samples.model.ShowcaseItem import com.airbnb.lottie.samples.utils.BaseEpoxyFragment -import com.airbnb.lottie.samples.utils.MvRxViewModel import com.airbnb.lottie.samples.views.animationItemView import com.airbnb.lottie.samples.views.loadingView import com.airbnb.lottie.samples.views.marquee import com.airbnb.lottie.samples.views.showcaseCarousel import com.airbnb.mvrx.Async -import com.airbnb.mvrx.MvRxState -import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.MavericksState +import com.airbnb.mvrx.MavericksViewModel +import com.airbnb.mvrx.MavericksViewModelFactory import com.airbnb.mvrx.Uninitialized import com.airbnb.mvrx.ViewModelContext import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState -data class ShowcaseState(val response: Async<AnimationResponseV2> = Uninitialized) : MvRxState +data class ShowcaseState(val response: Async<AnimationResponseV2> = Uninitialized) : MavericksState -class ShowcaseViewModel(initialState: ShowcaseState, api: LottiefilesApi) : MvRxViewModel<ShowcaseState>(initialState) { +class ShowcaseViewModel(initialState: ShowcaseState, api: LottiefilesApi) : MavericksViewModel<ShowcaseState>(initialState) { init { suspend { api.getCollection() }.execute { copy(response = it) } } - companion object : MvRxViewModelFactory<ShowcaseViewModel, ShowcaseState> { + companion object : MavericksViewModelFactory<ShowcaseViewModel, ShowcaseState> { override fun create(viewModelContext: ViewModelContext, state: ShowcaseState): ShowcaseViewModel { val service = viewModelContext.app<LottieApplication>().lottiefilesService return ShowcaseViewModel(state, service) @@ -39,22 +40,28 @@ class ShowcaseFragment : BaseEpoxyFragment() { + private inline fun <reified A : Activity> startActivity() { + val intent = Intent(requireContext(), A::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + requireContext().startActivity(intent) + } + private val showcaseItems = listOf( ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_dynamic_properties) { - it.startActivity(Intent(it, DynamicActivity::class.java)) + startActivity<DynamicActivity>() }, ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_animated_text) { - it.startActivity(Intent(it, TypographyDemoActivity::class.java)) + startActivity<TypographyDemoActivity>() }, ShowcaseItem(R.drawable.gilbert_animated, R.string.showcase_item_dynamic_text) { - it.startActivity(Intent(it, DynamicTextActivity::class.java)) + startActivity<DynamicTextActivity>() }, ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_bullseye) { - it.startActivity(Intent(it, BullseyeActivity::class.java)) + startActivity<BullseyeActivity>() }, ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_recycler_view) { - it.startActivity(Intent(it, WishListActivity::class.java)) - } + startActivity<WishListActivity>() + }, ) private val viewModel: ShowcaseViewModel by fragmentViewModel() @@ -82,9 +89,16 @@ title(it.title) if (it.preview != null) previewUrl("https://assets9.lottiefiles.com/${it.preview}") previewBackgroundColor(it.bgColorInt) - onClickListener { _ -> activityContext.startActivity(PlayerActivity.intent(activityContext, CompositionArgs(animationDataV2 = it))) } + onClickListener { _ -> + activityContext.startActivity( + PlayerActivity.intent( + activityContext, + CompositionArgs(animationDataV2 = it), + ), + ) + } } } } } -} \ No newline at end of file +}
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseEpoxyFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseEpoxyFragment.kt index 805cf4c..8fa5469 100644 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseEpoxyFragment.kt +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseEpoxyFragment.kt
@@ -6,8 +6,6 @@ import com.airbnb.epoxy.EpoxyController import com.airbnb.lottie.samples.R import com.airbnb.lottie.samples.databinding.BaseFragmentBinding -import com.airbnb.mvrx.BaseMvRxFragment - private class BaseEpoxyController( private val buildModelsCallback: EpoxyController.() -> Unit @@ -17,11 +15,11 @@ } } -abstract class BaseEpoxyFragment : BaseMvRxFragment(R.layout.base_fragment) { +abstract class BaseEpoxyFragment : BaseFragment(R.layout.base_fragment) { protected val binding: BaseFragmentBinding by viewBinding() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - binding.recyclerView.setController(BaseEpoxyController { buildModels() }) + binding.recyclerView.setControllerAndBuildModels(BaseEpoxyController { buildModels() }) } override fun invalidate() { @@ -29,4 +27,4 @@ } abstract fun EpoxyController.buildModels() -} \ No newline at end of file +}
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseFragment.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseFragment.kt new file mode 100644 index 0000000..d5c148d --- /dev/null +++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/BaseFragment.kt
@@ -0,0 +1,7 @@ +package com.airbnb.lottie.samples.utils + +import androidx.annotation.LayoutRes +import androidx.fragment.app.Fragment +import com.airbnb.mvrx.MavericksView + +abstract class BaseFragment(@LayoutRes contentLayoutId: Int) : Fragment(contentLayoutId), MavericksView
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/MvRxViewModel.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/MvRxViewModel.kt deleted file mode 100644 index bcda8a8..0000000 --- a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/MvRxViewModel.kt +++ /dev/null
@@ -1,28 +0,0 @@ -package com.airbnb.lottie.samples.utils - -import androidx.lifecycle.viewModelScope -import com.airbnb.lottie.samples.BuildConfig -import com.airbnb.mvrx.* -import kotlinx.coroutines.* - -abstract class MvRxViewModel<S : MvRxState>(initialState: S) : BaseMvRxViewModel<S>(initialState, BuildConfig.DEBUG) { - /** - * This uses [Dispatchers.Main.immediate] by default to mimic [viewModelScope]. - */ - fun <T : Any?> (suspend () -> T).execute( - dispatcher: CoroutineDispatcher = Dispatchers.Main.immediate, - reducer: S.(Async<T>) -> S - ): Job { - setState { reducer(Loading()) } - return viewModelScope.launch(dispatcher) { - try { - val result = invoke() - setState { reducer(Success(result)) } - } catch (e: CancellationException) { - throw e - } catch (e: Exception) { - setState { reducer(Fail(e)) } - } - } - } -} \ No newline at end of file
diff --git a/settings.gradle b/settings.gradle index 4fd80ba..e7fc7f9 100644 --- a/settings.gradle +++ b/settings.gradle
@@ -7,6 +7,9 @@ plugins { id 'de.fayard.refreshVersions' version '0.51.0' +//// # available:'0.60.0' +//// # available:'0.60.1' +//// # available:'0.60.2' } dependencyResolutionManagement {
diff --git a/snapshot-tests/build.gradle b/snapshot-tests/build.gradle index 7cfc9f0..ba1e5a0 100644 --- a/snapshot-tests/build.gradle +++ b/snapshot-tests/build.gradle
@@ -7,11 +7,11 @@ android { namespace 'com.airbnb.lottie.snapshots' - compileSdk 33 + compileSdk 34 defaultConfig { applicationId "com.airbnb.lottie.snapshots" minSdk 21 - targetSdk 33 + targetSdk 34 versionCode 1 versionName VERSION_NAME testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/versions.properties b/versions.properties index 227d7ca..94dcf4d 100644 --- a/versions.properties +++ b/versions.properties
@@ -8,26 +8,17 @@ #### suppress inspection "UnusedProperty" for whole file ## unused -plugin.android=8.0.2 -## # available=8.1.0-alpha01 -## # available=8.1.0-alpha02 -## # available=8.1.0-alpha03 -## # available=8.1.0-alpha04 -## # available=8.1.0-alpha05 -## # available=8.1.0-alpha06 -## # available=8.1.0-alpha07 -## # available=8.1.0-alpha08 -## # available=8.1.0-alpha09 -## # available=8.1.0-alpha10 -## # available=8.1.0-alpha11 -## # available=8.1.0-beta01 +plugin.android=8.1.1 ## # available=8.2.0-alpha01 ## # available=8.2.0-alpha02 -version.androidx.compose=2023.06.00 +version.androidx.compose=2023.08.00 -## unused -version.androidx.compose..compose-bom=2023.06.00 +version.androidx.compose.ui=1.5.0 +## # available=1.6.0-alpha01 +## # available=1.6.0-alpha02 +## # available=1.6.0-alpha03 +## # available=1.6.0-alpha04 version.coil-kt=2.4.0 @@ -35,9 +26,6 @@ version.retrofit2=2.9.0 -## unused -version.org.jacoco..org.jacoco.ant=0.8.10 - # Do not update to 2.0. It will pull in Kotlin as a transitive dependency into the lottie library. version.okio=1.17.5 ### available=2.0.0-RC1 @@ -74,6 +62,8 @@ ### available=3.1.0 ### available=3.2.0 ### available=3.3.0 +### available=3.4.0 +### available=3.5.0 version.okhttp3=4.11.0 ## # available=5.0.0-alpha.1 @@ -89,60 +79,65 @@ ## # available=5.0.0-alpha.11 version.mockito=5.3.1 +## # available=5.4.0 +## # available=5.5.0 -version.kotlinx.coroutines=1.7.1 +version.kotlinx.coroutines=1.6.4 -version.kotlin=1.8.21 -## # available=1.8.22 -## # available=1.9.0-Beta +version.kotlin=1.9.10 version.junit.junit=4.13.2 version.io.jsonwebtoken..jjwt=0.9.1 -version.google.dagger=2.46.1 +version.google.dagger=2.48 version.google.android.material=1.9.0 ## # available=1.10.0-alpha01 ## # available=1.10.0-alpha02 ## # available=1.10.0-alpha03 +## # available=1.10.0-alpha04 +## # available=1.10.0-alpha05 +## # available=1.10.0-alpha06 +## # available=1.11.0-alpha01 +## # available=1.11.0-alpha02 version.com.uber.nullaway..nullaway=0.10.10 +## # available=0.10.11 +## # available=0.10.12 +## # available=0.10.13 version.com.nhaarman.mockitokotlin2..mockito-kotlin=2.2.0 version.com.google.errorprone..error_prone_core=2.19.1 +## # available=2.20.0 +## # available=2.21.0 +## # available=2.21.1 version.com.google.code.gson..gson=2.10.1 -version.com.github.bumptech.glide..glide=4.15.1 +version.com.github.bumptech.glide..glide=4.16.0 version.com.github.PhilJay..MPAndroidChart=3.1.0 version.com.dlazaro66.qrcodereaderview..qrcodereaderview=2.0.2 version.com.amazonaws..aws-android-sdk-s3=2.71.0 +## # available=2.72.0 +## # available=2.73.0 version.com.amazonaws..aws-android-sdk-mobile-client=2.71.0 +## # available=2.72.0 +## # available=2.73.0 version.com.amazonaws..aws-android-sdk-auth-userpools=2.71.0 +## # available=2.72.0 +## # available=2.73.0 -version.com.airbnb.android..mvrx=1.5.1 -## # available=2.0.0-alpha1 -## # available=2.0.0-alpha2 -## # available=2.0.0-alpha3 -## # available=2.0.0-alpha4 -## # available=2.0.0-alpha5 -## # available=2.0.0-alpha6 -## # available=2.0.0-alpha7 -## # available=2.0.0-alpha8 -## # available=2.0.0-beta1 -## # available=2.0.0-beta2 -## # available=2.0.0-beta3 -version.com.airbnb.android..mavericks-compose=3.0.3 +version.com.airbnb.android..mavericks-compose=3.0.6 -version.com.airbnb.android..mavericks=3.0.3 +version.com.airbnb.android..mavericks=3.0.6 version.com.airbnb.android..epoxy-processor=5.1.3 @@ -152,6 +147,7 @@ ## # available=2.3.0-alpha01 ## # available=2.3.0-alpha02 ## # available=2.3.0-alpha03 +## # available=2.3.0-alpha04 version.androidx.test.rules=1.5.0 ## # available=1.6.0-alpha01 @@ -167,6 +163,7 @@ version.androidx.recyclerview=1.3.0 ## # available=1.3.1-rc01 +## # available=1.3.1 version.androidx.profileinstaller=1.3.1 @@ -178,17 +175,20 @@ ## # available=3.2.0-alpha05 ## # available=3.2.0-alpha06 ## # available=3.2.0-beta01 +## # available=3.2.0-rc01 +## # available=3.2.0 version.androidx.navigation=2.6.0 -## # available=2.7.0-alpha01 -## # available=2.7.0-beta01 version.androidx.multidex=2.0.1 -version.androidx.lifecycle=2.6.1 +version.androidx.lifecycle=2.5.1 +## # available=2.7.0-alpha01 -version.androidx.fragment=1.6.0 +version.androidx.fragment=1.6.1 ## # available=1.7.0-alpha01 +## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 version.androidx.core=1.10.1 ## # available=1.11.0-alpha01 @@ -201,11 +201,10 @@ ## # available=1.12.0-alpha03 ## # available=1.12.0-alpha04 ## # available=1.12.0-alpha05 +## # available=1.12.0-beta01 +## # available=1.12.0-rc01 -version.androidx.constraintlayout=2.1.1 -## # available=2.1.2 -## # available=2.1.3 -## # available=2.1.4 +version.androidx.constraintlayout=2.1.4 ## # available=2.2.0-alpha01 ## # available=2.2.0-alpha02 ## # available=2.2.0-alpha03 @@ -216,14 +215,8 @@ ## # available=2.2.0-alpha08 ## # available=2.2.0-alpha09 ## # available=2.2.0-alpha10 - -version.androidx.compose.ui=1.4.3 -## # available=1.5.0-alpha01 -## # available=1.5.0-alpha02 -## # available=1.5.0-alpha03 -## # available=1.5.0-alpha04 -## # available=1.5.0-beta01 -## # available=1.5.0-beta02 +## # available=2.2.0-alpha11 +## # available=2.2.0-alpha12 ## unused version.androidx.compose.material=1.4.3 @@ -237,7 +230,7 @@ ## # available=1.5.0-alpha02 ## # available=1.5.0-alpha03 -version.androidx.compose.compiler=1.4.7 +version.androidx.compose.compiler=1.5.3 version.androidx.collection=1.2.0 ## # available=1.3.0-dev01 @@ -245,12 +238,16 @@ ## # available=1.3.0-alpha02 ## # available=1.3.0-alpha03 ## # available=1.3.0-alpha04 +## # available=1.3.0-beta01 version.androidx.cardview=1.0.0 version.androidx.browser=1.5.0 ## # available=1.6.0-alpha01 ## # available=1.6.0-alpha02 +## # available=1.6.0-beta01 +## # available=1.6.0-rc01 +## # available=1.6.0 version.androidx.benchmark=1.1.1 ## # available=1.2.0-alpha01 @@ -268,26 +265,36 @@ ## # available=1.2.0-alpha13 ## # available=1.2.0-alpha14 ## # available=1.2.0-alpha15 +## # available=1.2.0-alpha16 +## # available=1.2.0-beta01 +## # available=1.2.0-beta02 +## # available=1.2.0-beta03 +## # available=1.2.0-beta04 +## # available=1.2.0-beta05 version.androidx.appcompat=1.6.1 ## # available=1.7.0-alpha01 ## # available=1.7.0-alpha02 +## # available=1.7.0-alpha03 -version.androidx.activity=1.7.2 +version.androidx.activity=1.6.1 ## # available=1.8.0-alpha01 ## # available=1.8.0-alpha02 ## # available=1.8.0-alpha03 ## # available=1.8.0-alpha04 ## # available=1.8.0-alpha05 +## # available=1.8.0-alpha06 +## # available=1.8.0-alpha07 plugin.net.ltgt.errorprone=3.1.0 -plugin.com.google.devtools.ksp=1.8.21-1.0.11 -## # available=1.8.22-1.0.11 -## # available=1.9.0-Beta-1.0.11 +plugin.com.google.devtools.ksp=1.9.10-1.0.13 plugin.org.ajoberstar.grgit=5.2.0 plugin.com.vanniktech.maven.publish=0.25.2 +## # available=0.25.3-rc1 +## # available=0.25.3 plugin.org.jetbrains.dokka=1.8.20 +## # available=1.9.0