Modernize build (Java 8 compatiblity, fix build warnings, remove dead code) (#2297)

diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 0862a24..c10be21 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -77,7 +77,7 @@
       - name: Build app
         run: ./gradlew snapshot-tests:assembleDebug snapshot-tests:assembleDebugAndroidTest --no-daemon
       - name: Run tests
-        uses: emulator-wtf/run-tests@master
+        uses: emulator-wtf/run-tests@v0.9.6
         with:
           api-token: ${{ env.EW_API_TOKEN }}
           app: snapshot-tests/build/outputs/apk/debug/snapshot-tests-debug.apk
diff --git a/build.gradle b/build.gradle
index 992b3a1..a26b100 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,29 +1,44 @@
 import org.ajoberstar.grgit.Grgit
-
-buildscript {
-  repositories {
-    google()
-    mavenCentral()
-  }
-  dependencies {
-    classpath libs.grgit.plugin
-    classpath libs.android.gradle.plugin
-    classpath libs.kotlin.gradle.plugin
-    classpath libs.gradle.maven.publish.plugin
-    classpath libs.dokka.gradle.plugin
-  }
-}
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
   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
 }
 
 allprojects {
-  repositories {
-    google()
-    mavenCentral()
-    maven { url "https://jitpack.io" }
+  def compileJavaVersion = JavaVersion.VERSION_17
+  def targetJavaVersion = JavaVersion.VERSION_1_8
+  pluginManager.withPlugin("java") {
+    java {
+      toolchain {
+        languageVersion.set(JavaLanguageVersion.of(compileJavaVersion.majorVersion))
+      }
+    }
+    tasks.withType(JavaCompile).configureEach {
+      options.release.set(targetJavaVersion.majorVersion)
+    }
+  }
+  pluginManager.withPlugin("org.jetbrains.kotlin.android") {
+    kotlin {
+      jvmToolchain(compileJavaVersion.majorVersion.toInteger())
+    }
+    tasks.withType(KotlinCompile).configureEach {
+      kotlinOptions.jvmTarget = targetJavaVersion.toString()
+    }
+  }
+  ["com.android.library", "com.android.application"].forEach { androidPlugin ->
+    pluginManager.withPlugin(androidPlugin) {
+      android {
+        sourceCompatibility targetJavaVersion
+        targetCompatibility targetJavaVersion
+      }
+    }
   }
 }
 
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index d52d958..d18b2f3 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,5 +1,7 @@
+## Generated by $ ./gradlew refreshVersionsCatalog
+
 [libraries]
-android-gradle-plugin = "com.android.tools.build:gradle:_"
+
 androidx-activity-compose = "androidx.activity:activity-compose:_"
 androidx-appcompat = "androidx.appcompat:appcompat:_"
 androidx-browser = "androidx.browser:browser:_"
@@ -34,21 +36,18 @@
 compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
 dagger = "com.google.dagger:dagger:_"
 dagger-compiler = "com.google.dagger:dagger-compiler:_"
-dokka-gradle-plugin = "org.jetbrains.dokka:dokka-gradle-plugin:_"
 epoxy = "com.airbnb.android:epoxy:_"
 epoxy-processor = "com.airbnb.android:epoxy-processor:_"
 errorprone-core = "com.google.errorprone:error_prone_core:_"
 errorprone-javac = "com.google.errorprone:javac:_"
 glide = "com.github.bumptech.glide:glide:_"
 google-material = "com.google.android.material:material:_"
-gradle-maven-publish-plugin = "com.vanniktech:gradle-maven-publish-plugin:_"
 grgit-plugin = "org.ajoberstar.grgit:grgit-gradle:_"
 gson = "com.google.code.gson:gson:_"
 javac = "com.google.errorprone:javac:_"
 jjwt = "io.jsonwebtoken:jjwt:_"
 junit4 = "junit:junit:_"
 kotlin-annotation-processing-gradle = "org.jetbrains.kotlin:kotlin-annotation-processing-gradle:_"
-kotlin-gradle-plugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:_"
 kotlin-parcelize-compiler = "org.jetbrains.kotlin:kotlin-parcelize-compiler:_"
 kotlin-parcelize-runtime = "org.jetbrains.kotlin:kotlin-parcelize-runtime:_"
 kotlinx-coroutines-android = "org.jetbrains.kotlinx:kotlinx-coroutines-android:_"
diff --git a/issue-repro-compose/build.gradle b/issue-repro-compose/build.gradle
index 129022b..4f5a631 100755
--- a/issue-repro-compose/build.gradle
+++ b/issue-repro-compose/build.gradle
@@ -2,7 +2,7 @@
 
 plugins {
     id 'com.android.application'
-    id "kotlin-android"
+    id "org.jetbrains.kotlin.android"
 }
 
 android {
@@ -15,13 +15,6 @@
         versionCode 1
         versionName "1.0"
     }
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_17
-        targetCompatibility JavaVersion.VERSION_17
-    }
-    kotlinOptions {
-        jvmTarget = JavaVersion.VERSION_17.toString()
-    }
     buildFeatures {
         compose true
     }
diff --git a/issue-repro-compose/src/main/AndroidManifest.xml b/issue-repro-compose/src/main/AndroidManifest.xml
index 9ca497e..02d78ec 100755
--- a/issue-repro-compose/src/main/AndroidManifest.xml
+++ b/issue-repro-compose/src/main/AndroidManifest.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.airbnb.lottie.issues.compose">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android">
 
     <application
         android:icon="@mipmap/ic_launcher"
diff --git a/issue-repro-compose/src/main/java/com/airbnb/lottie/issues/compose/ComposeIssueReproActivity.kt b/issue-repro-compose/src/main/kotlin/com/airbnb/lottie/issues/compose/ComposeIssueReproActivity.kt
similarity index 100%
rename from issue-repro-compose/src/main/java/com/airbnb/lottie/issues/compose/ComposeIssueReproActivity.kt
rename to issue-repro-compose/src/main/kotlin/com/airbnb/lottie/issues/compose/ComposeIssueReproActivity.kt
diff --git a/issue-repro/build.gradle b/issue-repro/build.gradle
index c5eaa35..2ce7bf5 100755
--- a/issue-repro/build.gradle
+++ b/issue-repro/build.gradle
@@ -1,6 +1,6 @@
 plugins {
     id 'com.android.application'
-    id 'kotlin-android'
+    id 'org.jetbrains.kotlin.android'
 }
 
 android {
@@ -13,10 +13,6 @@
         versionCode 1
         versionName "1.0"
     }
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_17
-        targetCompatibility JavaVersion.VERSION_17
-    }
     buildFeatures {
         viewBinding true
     }
diff --git a/issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt b/issue-repro/src/main/kotlin/com/airbnb/lottie/issues/IssueReproActivity.kt
similarity index 100%
rename from issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt
rename to issue-repro/src/main/kotlin/com/airbnb/lottie/issues/IssueReproActivity.kt
diff --git a/lottie-compose/build.gradle b/lottie-compose/build.gradle
index 14d6450..0e8e427 100644
--- a/lottie-compose/build.gradle
+++ b/lottie-compose/build.gradle
@@ -3,7 +3,7 @@
 
 plugins {
   id 'com.android.library'
-  id 'kotlin-android'
+  id 'org.jetbrains.kotlin.android'
   id 'com.vanniktech.maven.publish'
 }
 
@@ -20,12 +20,7 @@
       minifyEnabled false
     }
   }
-  compileOptions {
-    sourceCompatibility JavaVersion.VERSION_17
-    targetCompatibility JavaVersion.VERSION_17
-  }
   kotlinOptions {
-    jvmTarget = JavaVersion.VERSION_17.toString()
     freeCompilerArgs += [
         "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
     ]
diff --git a/lottie/build.gradle b/lottie/build.gradle
index c02c429..f3441b7 100644
--- a/lottie/build.gradle
+++ b/lottie/build.gradle
@@ -21,10 +21,6 @@
     textReport true
     textOutput 'stdout'
   }
-  compileOptions {
-    sourceCompatibility JavaVersion.VERSION_17
-    targetCompatibility JavaVersion.VERSION_17
-  }
   testOptions {
     unitTests {
       includeAndroidResources = true
@@ -54,25 +50,7 @@
   androidTestImplementation libs.androidx.test.espresso
 }
 
-task sourcesJar(type: Jar) {
-  from android.sourceSets.main.java.srcDirs
-  archiveClassifier.set('sources')
-}
-
-task javadoc(type: Javadoc) {
-  source = android.sourceSets.main.java.srcDirs
-  configurations.implementation.setCanBeResolved(true)
-  classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) + configurations.implementation
-}
-
-tasks.withType(Javadoc) {
-  // This started failing with the following when upgrading to AGP 7 and JDK 11.
-  // TODO: investigate why once AGP 7 is stable.
-  // javadoc: error - The code being documented uses modules but the packages defined in https://developer.android.com/reference/ are in the unnamed module.
-  failOnError false
-}
-
-tasks.withType(JavaCompile) {
+tasks.withType(JavaCompile).configureEach {
   // remove the if condition if you want to run NullAway on test code
   if (!name.toLowerCase().contains("test")) {
     options.errorprone {
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index e493288..68c4543 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -1323,7 +1323,7 @@
    */
   public <T> void addValueCallback(KeyPath keyPath, T property,
       final SimpleLottieValueCallback<T> callback) {
-    addValueCallback(keyPath, property, new LottieValueCallback<>() {
+    addValueCallback(keyPath, property, new LottieValueCallback<T>() {
       @Override
       public T getValue(LottieFrameInfo<T> frameInfo) {
         return callback.getValue(frameInfo);
diff --git a/sample-compose-benchmark/build.gradle b/sample-compose-benchmark/build.gradle
index 99a24ca..8111d09 100644
--- a/sample-compose-benchmark/build.gradle
+++ b/sample-compose-benchmark/build.gradle
@@ -7,13 +7,7 @@
   namespace 'com.airbnb.lottie.sample.compose.benchmark'
   compileSdk 33
 
-  compileOptions {
-    sourceCompatibility = JavaVersion.VERSION_17
-    targetCompatibility = JavaVersion.VERSION_17
-  }
-
   kotlinOptions {
-    jvmTarget = JavaVersion.VERSION_17.toString()
     freeCompilerArgs += "-Xopt-in=kotlin.RequiresOptIn"
   }
 
diff --git a/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineBenchmark.kt b/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineBenchmark.kt
index fef0b96..bb8da9f 100644
--- a/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineBenchmark.kt
+++ b/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineBenchmark.kt
@@ -19,6 +19,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
 import kotlin.time.DurationUnit
 import kotlin.time.ExperimentalTime
 
@@ -48,7 +49,6 @@
         benchmark(CompilationMode.Partial(baselineProfileMode = BaselineProfileMode.Require))
     }
 
-    @OptIn(ExperimentalTime::class)
     fun benchmark(compilationMode: CompilationMode) {
         benchmarkRule.measureRepeated(
             packageName = PACKAGE_NAME,
@@ -78,7 +78,6 @@
         }
     }
 
-    @OptIn(ExperimentalTime::class)
     private fun UiScrollable.waitUntilReady() {
         this.waitUntil {
             // We know that there are at least 9 children
@@ -86,8 +85,7 @@
         }
     }
 
-    @OptIn(ExperimentalTime::class)
-    private fun UiObject.clickAndWait(maxWaitTime: Duration = Duration.seconds(5)) {
+    private fun UiObject.clickAndWait(maxWaitTime: Duration = 5.seconds) {
         val maxWaitTimeMs = maxWaitTime.toLong(DurationUnit.MILLISECONDS)
         click()
         device.waitForIdle(maxWaitTimeMs)
@@ -95,8 +93,7 @@
         device.pressBack()
     }
 
-    @OptIn(ExperimentalTime::class)
-    private fun <T> T.waitUntil(maxWaitTime: Duration = Duration.seconds(5), condition: (T) -> Boolean) {
+    private fun <T> T.waitUntil(maxWaitTime: Duration = 5.seconds, condition: (T) -> Boolean) {
         var waitTime = 0L
         val maxWaitTimeMs = maxWaitTime.toLong(DurationUnit.MILLISECONDS)
         val incrementalDelay = 150L
diff --git a/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineProfiles.kt b/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineProfiles.kt
index 9413efc..04aed45 100644
--- a/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineProfiles.kt
+++ b/sample-compose-benchmark/src/main/java/com/airbnb/lottie/sample/compose/benchmark/LottieBaselineProfiles.kt
@@ -15,6 +15,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import kotlin.time.Duration
+import kotlin.time.Duration.Companion.seconds
 import kotlin.time.DurationUnit
 import kotlin.time.ExperimentalTime
 
@@ -36,7 +37,6 @@
     }
 
     @Test
-    @OptIn(ExperimentalTime::class)
     fun baselineProfiles() {
         baselineProfileRule.collectBaselineProfile(
             packageName = PACKAGE_NAME,
@@ -59,7 +59,6 @@
         }
     }
 
-    @OptIn(ExperimentalTime::class)
     private fun UiScrollable.waitUntilReady() {
         this.waitUntil {
             // We know that there are at least 9 children
@@ -67,8 +66,7 @@
         }
     }
 
-    @OptIn(ExperimentalTime::class)
-    private fun UiObject.clickAndWait(maxWaitTime: Duration = Duration.seconds(5)) {
+    private fun UiObject.clickAndWait(maxWaitTime: Duration = 5.seconds) {
         val maxWaitTimeMs = maxWaitTime.toLong(DurationUnit.MILLISECONDS)
         click()
         device.waitForIdle(maxWaitTimeMs)
@@ -76,8 +74,7 @@
         device.pressBack()
     }
 
-    @OptIn(ExperimentalTime::class)
-    private fun <T> T.waitUntil(maxWaitTime: Duration = Duration.seconds(5), condition: (T) -> Boolean) {
+    private fun <T> T.waitUntil(maxWaitTime: Duration = 5.seconds, condition: (T) -> Boolean) {
         var waitTime = 0L
         val maxWaitTimeMs = maxWaitTime.toLong(DurationUnit.MILLISECONDS)
         val incrementalDelay = 150L
diff --git a/sample-compose/build.gradle b/sample-compose/build.gradle
index f3c3698..bd7073e 100644
--- a/sample-compose/build.gradle
+++ b/sample-compose/build.gradle
@@ -2,7 +2,7 @@
 
 plugins {
   id 'com.android.application'
-  id "kotlin-android"
+  id "org.jetbrains.kotlin.android"
   id 'kotlin-kapt'
 }
 
@@ -24,12 +24,7 @@
       debuggable false
     }
   }
-  compileOptions {
-    sourceCompatibility JavaVersion.VERSION_17
-    targetCompatibility JavaVersion.VERSION_17
-  }
   kotlinOptions {
-    jvmTarget = '17'
     freeCompilerArgs += [
         "-Xallow-jvm-ir-dependencies",
         "-Xskip-prerelease-check",
diff --git a/sample/build.gradle b/sample/build.gradle
index 869b0ab..aee9b6d 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -1,7 +1,9 @@
+import static de.fayard.refreshVersions.core.Versions.versionFor
+
 plugins {
   id 'com.android.application'
-  id "kotlin-android"
-  id 'kotlin-parcelize'
+  id "org.jetbrains.kotlin.android"
+  id 'org.jetbrains.kotlin.plugin.parcelize'
   id 'com.google.devtools.ksp'
 }
 
@@ -40,17 +42,9 @@
     textOutput 'stdout'
     baseline file("lint-baseline.xml")
   }
-  compileOptions {
-    sourceCompatibility JavaVersion.VERSION_17
-    targetCompatibility JavaVersion.VERSION_17
-  }
   kotlinOptions {
-    jvmTarget = JavaVersion.VERSION_17.toString()
     freeCompilerArgs += ["-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"]
   }
-  sourceSets {
-    main.java.srcDirs += 'src/main/kotlin'
-  }
   packagingOptions {
     exclude 'META-INF/LICENSE.txt'
     exclude 'META-INF/NOTICE.txt'
@@ -66,6 +60,7 @@
   implementation libs.androidx.appcompat
   implementation libs.androidx.recyclerview
   implementation libs.androidx.paging.runtime.ktx
+  implementation libs.androidx.viewmodel.ktx
   implementation libs.androidx.cardview
   implementation libs.androidx.core.ktx
   implementation libs.androidx.constraintlayout
diff --git a/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt b/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
index ca15b50..59cc86e 100644
--- a/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
+++ b/sample/src/androidTest/java/com/airbnb/lottie/samples/FragmentVisibilityTests.kt
@@ -9,7 +9,6 @@
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
-import androidx.annotation.IdRes
 import androidx.appcompat.app.AlertDialog
 import androidx.core.view.isVisible
 import androidx.fragment.app.Fragment
@@ -37,6 +36,7 @@
 import org.junit.Test
 import org.junit.runner.RunWith
 import kotlin.random.Random
+import androidx.appcompat.R as AppcompatR
 
 @RunWith(AndroidJUnit4::class)
 @LargeTest
@@ -59,7 +59,7 @@
     @Test
     fun testRecyclerViewCanAutoPlayInOnBindRebind() {
         class TestFragment : Fragment() {
-            override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+            override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
                 return RecyclerView(requireContext()).apply {
                     layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
                     // Setting itemAnimator to null is important for this test in order to
@@ -158,7 +158,7 @@
             }
         }
 
-        val scenario = launchFragmentInContainer<TestFragment>(themeResId = R.style.Theme_AppCompat)
+        val scenario = launchFragmentInContainer<TestFragment>(themeResId = AppcompatR.style.Theme_AppCompat)
         onIdle()
         scenario.onFragment { fragment ->
             val animationView = fragment.requireView().findViewById<LottieAnimationView>(R.id.animation_view)
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/FragmentViewBindingDelegate.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/FragmentViewBindingDelegate.kt
index 46635ac..cded27e 100644
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/FragmentViewBindingDelegate.kt
+++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/utils/FragmentViewBindingDelegate.kt
@@ -4,9 +4,9 @@
 import android.os.Looper
 import android.view.View
 import androidx.fragment.app.Fragment
+import androidx.lifecycle.DefaultLifecycleObserver
 import androidx.lifecycle.Lifecycle
-import androidx.lifecycle.LifecycleObserver
-import androidx.lifecycle.OnLifecycleEvent
+import androidx.lifecycle.LifecycleOwner
 import androidx.viewbinding.ViewBinding
 import kotlin.properties.ReadOnlyProperty
 import kotlin.reflect.KProperty
@@ -31,9 +31,9 @@
 
     init {
         fragment.viewLifecycleOwnerLiveData.observe(fragment) { viewLifecycleOwner ->
-            viewLifecycleOwner.lifecycle.addObserver(object : LifecycleObserver {
-                @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
-                fun onDestroy() {
+            viewLifecycleOwner.lifecycle.addObserver(object : DefaultLifecycleObserver {
+
+                override fun onDestroy(owner: LifecycleOwner) {
                     // Lifecycle listeners are called before onDestroyView in a Fragment.
                     // However, we want views to be able to use bindings in onDestroyView
                     // to do cleanup so we clear the reference one frame later.
diff --git a/settings.gradle b/settings.gradle
index 5ab302e..4fd80ba 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,7 +1,23 @@
+pluginManagement {
+  repositories {
+    gradlePluginPortal()
+    google()
+  }
+}
+
 plugins {
   id 'de.fayard.refreshVersions' version '0.51.0'
 }
 
+dependencyResolutionManagement {
+  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+  repositories {
+    google()
+    mavenCentral()
+    maven { url 'https://jitpack.io' }
+  }
+}
+
 include ':lottie'
 include ':lottie-compose'
 include ':sample'
diff --git a/snapshot-tests/build.gradle b/snapshot-tests/build.gradle
index c50f799..854ddc2 100644
--- a/snapshot-tests/build.gradle
+++ b/snapshot-tests/build.gradle
@@ -2,8 +2,7 @@
 
 plugins {
   id 'com.android.application'
-  id "kotlin-android"
-  id 'kotlin-kapt'
+  id "org.jetbrains.kotlin.android"
 }
 
 android {
@@ -32,13 +31,7 @@
     }
   }
 
-  compileOptions {
-    sourceCompatibility JavaVersion.VERSION_17
-    targetCompatibility JavaVersion.VERSION_17
-  }
-
   kotlinOptions {
-    jvmTarget = JavaVersion.VERSION_17.toString()
     freeCompilerArgs += [
         "-Xallow-jvm-ir-dependencies",
         "-Xskip-prerelease-check",
@@ -57,10 +50,6 @@
   }
 }
 
-kapt {
-  correctErrorTypes = true
-}
-
 dependencies {
   implementation project(':lottie-compose')
   implementation libs.androidx.appcompat
diff --git a/versions.properties b/versions.properties
index a00a2ae..cadc98e 100644
--- a/versions.properties
+++ b/versions.properties
@@ -7,6 +7,7 @@
 #### suppress inspection "SpellCheckingInspection" for whole file
 #### suppress inspection "UnusedProperty" for whole file
 
+## unused
 plugin.android=8.0.1
 ## # available=8.1.0-alpha01
 ## # available=8.1.0-alpha02
@@ -27,41 +28,22 @@
    plugin.ksp=1.8.21-1.0.11
 
 version.androidx.compose=2023.05.00
+##           # available=2023.05.01
 
 ## unused
 version.androidx.compose..compose-bom=2023.05.00
 
 version.coil-kt=2.3.0
+##  # available=2.4.0
 
 version.robolectric=4.10.2
+##      # available=4.10.3
 
 version.retrofit2=2.9.0
 
-version.org.jetbrains.dokka..dokka-gradle-plugin=1.5.30
-##                                   # available=1.5.31
-##                                   # available=1.6.0
-##                                   # available=1.6.10
-##                                   # available=1.6.20
-##                                   # available=1.6.21
-##                                   # available=1.7.0
-##                                   # available=1.7.10
-##                                   # available=1.7.20
-##                                   # available=1.8.10
-
 ## unused
 version.org.jacoco..org.jacoco.ant=0.8.3
 
-version.org.ajoberstar.grgit..grgit-gradle=4.1.1
-##                             # available=5.0.0-beta.1
-##                             # available=5.0.0-rc.1
-##                             # available=5.0.0-rc.2
-##                             # available=5.0.0-rc.3
-##                             # available=5.0.0-rc.7
-##                             # available=5.0.0
-##                             # available=5.1.0-rc.1
-##                             # available=5.1.0
-##                             # available=5.2.0
-
 # 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
@@ -137,14 +119,16 @@
 ##  # available=5.3.1
 
 version.kotlinx.coroutines=1.7.0
+##             # available=1.7.1
 
 version.kotlin=1.8.21
+## # available=1.9.0-Beta
 
 version.junit.junit=4.13.2
 
 version.io.jsonwebtoken..jjwt=0.9.1
 
-version.google.dagger=2.46
+version.google.dagger=2.46.1
 
 version.google.android.material=1.4.0
 ##                  # available=1.5.0-alpha01
@@ -181,13 +165,7 @@
 ##                  # available=1.9.0
 ##                  # available=1.10.0-alpha01
 ##                  # available=1.10.0-alpha02
-
-version.com.vanniktech..gradle-maven-publish-plugin=0.24.0
-##                                      # available=0.25.0-rc1
-##                                      # available=0.25.0
-##                                      # available=0.25.1
-##                                      # available=0.25.2-rc1
-##                                      # available=0.25.2
+##                  # available=1.10.0-alpha03
 
 version.com.uber.nullaway..nullaway=0.9.2
 ##                      # available=0.9.3
@@ -240,6 +218,8 @@
 ##                                  # available=2.16
 ##                                  # available=2.17.0
 ##                                  # available=2.18.0
+##                                  # available=2.19.0
+##                                  # available=2.19.1
 
 version.com.google.code.gson..gson=2.8.8
 ##                     # available=2.8.9
@@ -381,6 +361,8 @@
 ##                            # available=2.66.0
 ##                            # available=2.67.0
 ##                            # available=2.68.0
+##                            # available=2.69.0
+##                            # available=2.70.0
 
 version.com.amazonaws..aws-android-sdk-mobile-client=2.8.3
 ##                                       # available=2.8.4
@@ -501,6 +483,8 @@
 ##                                       # available=2.66.0
 ##                                       # available=2.67.0
 ##                                       # available=2.68.0
+##                                       # available=2.69.0
+##                                       # available=2.70.0
 
 version.com.amazonaws..aws-android-sdk-auth-userpools=2.8.3
 ##                                        # available=2.8.4
@@ -621,6 +605,8 @@
 ##                                        # available=2.66.0
 ##                                        # available=2.67.0
 ##                                        # available=2.68.0
+##                                        # available=2.69.0
+##                                        # available=2.70.0
 
 version.com.airbnb.android..mvrx=1.5.1
 ##                   # available=2.0.0-alpha1
@@ -643,6 +629,7 @@
 ##                                # available=3.0.0
 ##                                # available=3.0.1
 ##                                # available=3.0.2
+##                                # available=3.0.3
 
 version.com.airbnb.android..mavericks=2.3.0
 ##                        # available=2.4.0
@@ -654,10 +641,13 @@
 ##                        # available=3.0.0
 ##                        # available=3.0.1
 ##                        # available=3.0.2
+##                        # available=3.0.3
 
 version.com.airbnb.android..epoxy-processor=5.1.2
+##                              # available=5.1.3
 
 version.com.airbnb.android..epoxy=5.1.2
+##                    # available=5.1.3
 
 version.androidx.test.uiautomator=2.2.0
 ##                    # available=2.3.0-alpha01
@@ -674,6 +664,18 @@
 ##                 # available=3.6.0-alpha01
 
 version.androidx.test.core=1.4.0
+##             # available=1.4.1-alpha01
+##             # available=1.4.1-alpha02
+##             # available=1.4.1-alpha03
+##             # available=1.4.1-alpha04
+##             # available=1.4.1-alpha05
+##             # available=1.4.1-alpha06
+##             # available=1.4.1-alpha07
+##             # available=1.5.0-alpha01
+##             # available=1.5.0-alpha02
+##             # available=1.5.0-beta01
+##             # available=1.5.0-rc01
+##             # available=1.5.0
 ##             # available=1.6.0-alpha01
 
 version.androidx.recyclerview=1.2.1
@@ -683,23 +685,17 @@
 ##                # available=1.3.0-beta02
 ##                # available=1.3.0-rc01
 ##                # available=1.3.0
+##                # available=1.3.1-rc01
 
 version.androidx.profileinstaller=1.3.1
 
-version.androidx.paging=3.0.1
-##          # available=3.1.0-alpha01
-##          # available=3.1.0-alpha02
-##          # available=3.1.0-alpha03
-##          # available=3.1.0-alpha04
-##          # available=3.1.0-beta01
-##          # available=3.1.0-rc01
-##          # available=3.1.0
-##          # available=3.1.1
+version.androidx.paging=3.1.1
 ##          # available=3.2.0-alpha01
 ##          # available=3.2.0-alpha02
 ##          # available=3.2.0-alpha03
 ##          # available=3.2.0-alpha04
 ##          # available=3.2.0-alpha05
+##          # available=3.2.0-alpha06
 
 version.androidx.navigation=2.4.0-alpha10
 ##              # available=2.4.0-beta01
@@ -729,37 +725,13 @@
 ##              # available=2.6.0-alpha08
 ##              # available=2.6.0-alpha09
 ##              # available=2.6.0-beta01
+##              # available=2.6.0-rc01
+##              # available=2.6.0-rc02
+##              # available=2.7.0-alpha01
 
 version.androidx.multidex=2.0.1
 
-version.androidx.lifecycle=2.3.1
-##             # available=2.4.0-alpha01
-##             # available=2.4.0-alpha02
-##             # available=2.4.0-alpha03
-##             # available=2.4.0-beta01
-##             # available=2.4.0-rc01
-##             # available=2.4.0
-##             # available=2.4.1
-##             # available=2.5.0-alpha01
-##             # available=2.5.0-alpha02
-##             # available=2.5.0-alpha03
-##             # available=2.5.0-alpha04
-##             # available=2.5.0-alpha05
-##             # available=2.5.0-alpha06
-##             # available=2.5.0-beta01
-##             # available=2.5.0-rc01
-##             # available=2.5.0-rc02
-##             # available=2.5.0
-##             # available=2.5.1
-##             # available=2.6.0-alpha01
-##             # available=2.6.0-alpha02
-##             # available=2.6.0-alpha03
-##             # available=2.6.0-alpha04
-##             # available=2.6.0-alpha05
-##             # available=2.6.0-beta01
-##             # available=2.6.0-rc01
-##             # available=2.6.0
-##             # available=2.6.1
+version.androidx.lifecycle=2.6.1
 
 version.androidx.fragment=1.5.7
 ##            # available=1.6.0-alpha01
@@ -772,6 +744,7 @@
 ##            # available=1.6.0-alpha08
 ##            # available=1.6.0-alpha09
 ##            # available=1.6.0-beta01
+##            # available=1.6.0-rc01
 
 ## unused
 version.androidx.databinding=7.1.3
@@ -807,11 +780,15 @@
 ##        # available=1.10.0-beta01
 ##        # available=1.10.0-rc01
 ##        # available=1.10.0
+##        # available=1.10.1
 ##        # available=1.11.0-alpha01
 ##        # available=1.11.0-alpha02
 ##        # available=1.11.0-alpha03
+##        # available=1.11.0-alpha04
+##        # available=1.11.0-beta01
 ##        # available=1.12.0-alpha01
 ##        # available=1.12.0-alpha03
+##        # available=1.12.0-alpha04
 
 version.androidx.constraintlayout=2.1.1
 ##                    # available=2.1.2
@@ -826,6 +803,7 @@
 ##                    # available=2.2.0-alpha07
 ##                    # available=2.2.0-alpha08
 ##                    # available=2.2.0-alpha09
+##                    # available=2.2.0-alpha10
 
 version.androidx.compose.ui=1.1.1
 ##              # available=1.2.0-alpha01
@@ -870,7 +848,10 @@
 ##              # 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
 
+## unused
 version.androidx.compose.material=1.1.1
 ##                    # available=1.2.0-alpha01
 ##                    # available=1.2.0-alpha02
@@ -1062,11 +1043,43 @@
 ##            # available=1.7.0-rc01
 ##            # available=1.7.0
 ##            # available=1.7.1
+##            # available=1.7.2
 ##            # available=1.8.0-alpha01
 ##            # available=1.8.0-alpha02
 ##            # available=1.8.0-alpha03
+##            # available=1.8.0-alpha04
 
 plugin.net.ltgt.errorprone=3.0.1
 ##             # available=3.1.0
 
 plugin.com.google.devtools.ksp=1.8.21-1.0.11
+##                 # available=1.9.0-Beta-1.0.11
+
+plugin.org.ajoberstar.grgit=4.1.1
+##              # available=5.0.0-beta.1
+##              # available=5.0.0-rc.1
+##              # available=5.0.0-rc.2
+##              # available=5.0.0-rc.3
+##              # available=5.0.0-rc.7
+##              # available=5.0.0
+##              # available=5.1.0-rc.1
+##              # available=5.1.0
+##              # available=5.2.0
+
+plugin.com.vanniktech.maven.publish=0.24.0
+##                      # available=0.25.0-rc1
+##                      # available=0.25.0
+##                      # available=0.25.1
+##                      # available=0.25.2-rc1
+##                      # available=0.25.2
+
+plugin.org.jetbrains.dokka=1.5.30
+##             # available=1.5.31
+##             # available=1.6.0
+##             # available=1.6.10
+##             # available=1.6.20
+##             # available=1.6.21
+##             # available=1.7.0
+##             # available=1.7.10
+##             # available=1.7.20
+##             # available=1.8.10