Upgrade to Compose Beta 4 and other dependencies (#1786)

diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 88c9534..c7fc802 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -36,5 +36,10 @@
       <option name="name" value="MavenLocal" />
       <option name="url" value="file:$USER_HOME$/.m2/repository/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="MavenRepo" />
+      <option name="name" value="MavenRepo" />
+      <option name="url" value="https://repo.maven.apache.org/maven2/" />
+    </remote-repository>
   </component>
 </project>
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 1c170f6..6db606b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -2,13 +2,12 @@
 
 buildscript {
   ext {
-    composeVersion = '1.0.0-beta03'
-    kotlinVersion = '1.4.31'
-    daggerVersion = '2.32'
+    composeVersion = '1.0.0-beta04'
+    kotlinVersion = '1.4.32'
+    daggerVersion = '2.34'
   }
 
   repositories {
-    jcenter()
     google()
     maven {
       url "https://plugins.gradle.org/m2/"
@@ -16,11 +15,10 @@
   }
   dependencies {
     classpath 'org.ajoberstar:grgit:1.9.3'
-    classpath 'com.android.tools.build:gradle:7.0.0-alpha12'
+    classpath 'com.android.tools.build:gradle:7.0.0-alpha14'
     classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
-    classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlinVersion"
     classpath 'org.ajoberstar:grgit:1.9.3'
-    classpath "net.ltgt.gradle:gradle-errorprone-plugin:0.6"
+    classpath "net.ltgt.gradle:gradle-errorprone-plugin:2.0.1"
     classpath 'com.vanniktech:gradle-maven-publish-plugin:0.13.0'
     classpath 'org.jetbrains.dokka:dokka-gradle-plugin:1.4.10.2'
   }
@@ -29,15 +27,15 @@
 allprojects {
   repositories {
     google()
-    jcenter()
+    mavenCentral()
     maven {
       url "https://jitpack.io"
     }
     maven {
-      url "https://oss.sonatype.org/content/repositories/snapshots/"
+      url "https://kotlin.bintray.com/kotlinx"
     }
-    flatDir {
-      dirs 'libs'
+    maven {
+      url "https://oss.sonatype.org/content/repositories/snapshots/"
     }
   }
 }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 0ea3e8a..e82caa4 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https://services.gradle.org/distributions/gradle-6.8.2-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-all.zip
diff --git a/issue-repro-compose/build.gradle b/issue-repro-compose/build.gradle
index 72f8700..9c13724 100755
--- a/issue-repro-compose/build.gradle
+++ b/issue-repro-compose/build.gradle
@@ -1,6 +1,5 @@
 apply plugin: 'com.android.application'
 apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
 
 android {
     compileSdkVersion 30
@@ -26,14 +25,13 @@
     }
     composeOptions {
         kotlinCompilerExtensionVersion composeVersion
-        kotlinCompilerVersion kotlinVersion
     }
 }
 
 dependencies {
     implementation project(':lottie-compose')
-    implementation 'androidx.appcompat:appcompat:1.3.0-beta01'
-    implementation 'androidx.activity:activity-compose:1.3.0-alpha04'
+    implementation 'androidx.appcompat:appcompat:1.3.0-rc01'
+    implementation 'androidx.activity:activity-compose:1.3.0-alpha05'
     implementation "androidx.compose.ui:ui:$composeVersion"
     implementation "androidx.compose.material:material:$composeVersion"
     implementation "androidx.compose.material:material-icons-extended:$composeVersion"
diff --git a/issue-repro/build.gradle b/issue-repro/build.gradle
index 6c20bd4..43bb4b7 100755
--- a/issue-repro/build.gradle
+++ b/issue-repro/build.gradle
@@ -1,6 +1,5 @@
 apply plugin: 'com.android.application'
 apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
 
 android {
     compileSdkVersion 30
@@ -12,6 +11,10 @@
         versionName "1.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
     }
+
+    buildFeatures {
+        viewBinding true
+    }
 }
 
 dependencies {
diff --git a/issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt b/issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt
index b367194..495438c 100755
--- a/issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt
+++ b/issue-repro/src/main/java/com/airbnb/lottie/issues/IssueReproActivity.kt
@@ -2,10 +2,13 @@
 
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
+import com.airbnb.lottie.issues.databinding.IssueReproActivityBinding
 
-class IssueReproActivity : AppCompatActivity(R.layout.issue_repro_activity) {
+class IssueReproActivity : AppCompatActivity() {
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        val binding = IssueReproActivityBinding.inflate(layoutInflater)
+        setContentView(binding.root)
         // Reproduce any issues here.
     }
 }
diff --git a/lottie-compose/build.gradle b/lottie-compose/build.gradle
index 7cecc15..616f72a 100644
--- a/lottie-compose/build.gradle
+++ b/lottie-compose/build.gradle
@@ -33,7 +33,6 @@
   }
   composeOptions {
     kotlinCompilerExtensionVersion composeVersion
-    kotlinCompilerVersion kotlinVersion
   }
 }
 
diff --git a/sample-compose/build.gradle b/sample-compose/build.gradle
index 8b6535d..2b929c3 100644
--- a/sample-compose/build.gradle
+++ b/sample-compose/build.gradle
@@ -43,7 +43,6 @@
   }
   composeOptions {
     kotlinCompilerExtensionVersion composeVersion
-    kotlinCompilerVersion kotlinVersion
   }
 }
 
diff --git a/sample/build.gradle b/sample/build.gradle
index 9528c11..c31ba06 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -70,51 +70,49 @@
   implementation project(':lottie')
   implementation 'androidx.multidex:multidex:2.0.1'
 
-  implementation "androidx.fragment:fragment-ktx:1.2.5"
+  implementation "androidx.fragment:fragment-ktx:1.3.2"
   implementation "androidx.appcompat:appcompat:1.2.0"
   implementation "androidx.recyclerview:recyclerview:1.1.0"
-  implementation "androidx.paging:paging-runtime:3.0.0-alpha5"
-  implementation "androidx.paging:paging-runtime-ktx:3.0.0-alpha06"
+  implementation "androidx.paging:paging-runtime-ktx:3.0.0-beta03"
   implementation "androidx.cardview:cardview:1.0.0"
-  implementation 'androidx.core:core-ktx:1.3.1'
-  implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
-  implementation "androidx.browser:browser:1.2.0"
+  implementation 'androidx.core:core-ktx:1.3.2'
+  implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+  implementation "androidx.browser:browser:1.3.0"
   implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
-  kapt "androidx.lifecycle:lifecycle-common-java8:2.2.0"
-  implementation "com.google.android.material:material:1.2.1"
+  kapt "androidx.lifecycle:lifecycle-common-java8:2.3.1"
+  implementation "com.google.android.material:material:1.3.0"
 
-  implementation 'com.airbnb.android:epoxy:4.2.0'
-  kapt 'com.airbnb.android:epoxy-processor:4.2.0'
+  implementation 'com.airbnb.android:epoxy:4.4.4'
+  kapt 'com.airbnb.android:epoxy-processor:4.4.4'
   implementation 'com.airbnb.android:mvrx:1.5.1'
 
   implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
   implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
   implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion"
-  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
-  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2'
-  implementation 'com.matthew-tamlin:sliding-intro-screen:3.2.0'
+  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3'
+  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3'
   implementation 'com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.2'
   implementation 'com.github.PhilJay:MPAndroidChart:3.1.0'
   implementation 'com.amazonaws:aws-android-sdk-s3:2.8.3'
   implementation ('com.amazonaws:aws-android-sdk-mobile-client:2.8.3@aar') { transitive = true }
   implementation ('com.amazonaws:aws-android-sdk-auth-userpools:2.8.3@aar') { transitive = true }
   implementation 'com.google.code.gson:gson:2.8.6'
-  implementation 'com.squareup.okhttp3:okhttp:4.9.0'
+  implementation 'com.squareup.okhttp3:okhttp:4.9.1'
   implementation 'com.squareup.retrofit2:retrofit:2.9.0'
   implementation 'com.squareup.retrofit2:adapter-rxjava2:2.9.0'
   implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
   implementation 'com.github.bumptech.glide:glide:4.9.0'
 
-  debugImplementation("androidx.fragment:fragment-testing:1.3.0-alpha08")
+  debugImplementation 'androidx.fragment:fragment-testing:1.3.2'
 
-  testImplementation 'junit:junit:4.13.1'
+  testImplementation 'junit:junit:4.13.2'
 
   androidTestImplementation 'androidx.test:core:1.3.0-rc01'
   androidTestImplementation 'androidx.test.ext:junit:1.1.2'
   androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
   androidTestImplementation 'androidx.test.espresso:espresso-idling-resource:3.3.0'
   androidTestImplementation 'androidx.test:rules:1.3.0'
-  androidTestImplementation 'com.squareup.okhttp3:okhttp:4.9.0'
+  androidTestImplementation 'com.squareup.okhttp3:okhttp:4.9.1'
   androidTestImplementation 'io.jsonwebtoken:jjwt:0.9.0'
   androidTestImplementation "org.mockito:mockito-android:2.28.2"
   androidTestImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index 34964be..b0b2fab 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -36,9 +36,6 @@
             android:name=".BullseyeActivity"
             android:screenOrientation="portrait" />
         <activity
-            android:name=".AppIntroActivity"
-            android:screenOrientation="portrait" />
-        <activity
             android:name=".QRScanActivity"
             android:screenOrientation="portrait" />
         <activity android:name=".DynamicActivity" />
diff --git a/sample/src/main/kotlin/com/airbnb/lottie/samples/AppIntroActivity.kt b/sample/src/main/kotlin/com/airbnb/lottie/samples/AppIntroActivity.kt
deleted file mode 100644
index 511249d..0000000
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/AppIntroActivity.kt
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.airbnb.lottie.samples
-
-import android.os.Bundle
-import android.view.animation.Interpolator
-import android.widget.Scroller
-import androidx.fragment.app.Fragment
-import com.airbnb.lottie.LottieAnimationView
-import com.airbnb.lottie.samples.utils.inflate
-import com.airbnb.lottie.samples.utils.lerp
-import com.matthewtamlin.sliding_intro_screen_library.buttons.IntroButton
-import com.matthewtamlin.sliding_intro_screen_library.core.IntroActivity
-import com.matthewtamlin.sliding_intro_screen_library.core.LockableViewPager
-
-
-class AppIntroActivity : IntroActivity() {
-    private val animationView: LottieAnimationView by lazy {
-        rootView.inflate(R.layout.app_intro_animation_view, false) as LottieAnimationView
-    }
-    private val viewPager: LockableViewPager by lazy {
-        findViewById(R.id.intro_activity_viewPager)
-    }
-
-    override fun generatePages(savedInstanceState: Bundle?) = listOf(EmptyFragment(), EmptyFragment(), EmptyFragment(), EmptyFragment())
-
-    override fun onCreate(savedInstanceState: Bundle?) {
-        super.onCreate(savedInstanceState)
-        rootView.addView(animationView, 0)
-        setViewPagerScroller()
-
-        addPageChangeListener(OnPageChangeListenerAdapter(
-            onPageScrolled = { position, positionOffset, _ ->
-                setAnimationProgress(position, positionOffset)
-            }
-        ))
-    }
-
-    override fun generateFinalButtonBehaviour(): IntroButton.Behaviour {
-        return object : IntroButton.Behaviour {
-            override fun setActivity(activity: IntroActivity) { finish() }
-            override fun getActivity(): IntroActivity? = null
-            override fun run() {}
-        }
-    }
-
-    private fun setAnimationProgress(position: Int, positionOffset: Float) {
-        val startProgress = ANIMATION_TIMES[position]
-        val endProgress = ANIMATION_TIMES[position + 1]
-
-        animationView.progress = startProgress.lerp(endProgress, positionOffset)
-    }
-
-    class EmptyFragment : Fragment(R.layout.empty_fragment)
-
-    private fun setViewPagerScroller() {
-        try {
-            val scrollerField = androidx.viewpager.widget.ViewPager::class.java.getDeclaredField("mScroller")
-            scrollerField.isAccessible = true
-            val interpolator = androidx.viewpager.widget.ViewPager::class.java.getDeclaredField("sInterpolator")
-            interpolator.isAccessible = true
-
-            val scroller = object : Scroller(this, interpolator.get(null) as Interpolator) {
-                override fun startScroll(startX: Int, startY: Int, dx: Int, dy: Int, duration: Int) {
-                    super.startScroll(startX, startY, dx, dy, duration * 7)
-                }
-            }
-            scrollerField.set(viewPager, scroller)
-        } catch (e: NoSuchFieldException) {
-            // Do nothing.
-        } catch (e: IllegalAccessException) {
-            // Do nothing.
-        }
-    }
-
-    companion object {
-        private val ANIMATION_TIMES = floatArrayOf(0f, 0.3333f, 0.6666f, 1f, 1f)
-    }
-}
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 cfaa7b9..69013a5 100644
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
+++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/LottiefilesFragment.kt
@@ -53,7 +53,7 @@
     fun setQuery(query: String) = setState { copy(query = query) }
 
     companion object : MvRxViewModelFactory<LottiefilesViewModel, LottiefilesState> {
-        override fun create(viewModelContext: ViewModelContext, state: LottiefilesState): LottiefilesViewModel? {
+        override fun create(viewModelContext: ViewModelContext, state: LottiefilesState): LottiefilesViewModel {
             val service = viewModelContext.app<LottieApplication>().lottiefilesService
             return LottiefilesViewModel(state, service)
         }
@@ -90,6 +90,10 @@
             LoadResult.Error(e)
         }
     }
+
+    override fun getRefreshKey(state: PagingState<Int, AnimationData>): Int? {
+        return state.closestItemToPosition(state.anchorPosition ?: return null)?.id as Int?
+    }
 }
 
 class LottiefilesFragment : BaseMvRxFragment(R.layout.lottiefiles_fragment) {
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 339a3ee..3379dd2 100644
--- a/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt
+++ b/sample/src/main/kotlin/com/airbnb/lottie/samples/ShowcaseFragment.kt
@@ -34,9 +34,6 @@
 class ShowcaseFragment : BaseEpoxyFragment() {
 
     private val showcaseItems = listOf(
-            ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_app_intro) {
-                startActivity(Intent(requireContext(), AppIntroActivity::class.java))
-            },
             ShowcaseItem(R.drawable.showcase_preview_lottie, R.string.showcase_item_dynamic_properties) {
                 startActivity(Intent(requireContext(), DynamicActivity::class.java))
             },
diff --git a/sample/src/main/res/layout/app_intro_animation_view.xml b/sample/src/main/res/layout/app_intro_animation_view.xml
deleted file mode 100644
index 743e9f7..0000000
--- a/sample/src/main/res/layout/app_intro_animation_view.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<com.airbnb.lottie.LottieAnimationView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/animation_view"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    app:lottie_rawRes="@raw/walkthrough"/>
\ No newline at end of file
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index ad9fc55..5ddb8a1 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -78,7 +78,6 @@
 
     <string name="anonymous">Anonymous</string>
 
-    <string name="showcase_item_app_intro">App\nTutorial</string>
     <string name="showcase_item_bullseye">\nBullseye</string>
     <string name="showcase_item_dynamic_properties">Dynamic\nProperties</string>
     <string name="showcase_item_animated_text">Animated\nText</string>