Merge "Ensure test assertions are run before test completes." into androidx-master-dev
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomConfigurationContextTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomConfigurationContextTestCase.kt
index df6d2bc..9c05ff0 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomConfigurationContextTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeCustomConfigurationContextTestCase.kt
@@ -16,19 +16,15 @@
 
 package androidx.appcompat.app
 
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
 import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
 import androidx.appcompat.app.NightModeCustomConfigurationActivity.CUSTOM_FONT_SCALE
 import androidx.appcompat.app.NightModeCustomConfigurationActivity.CUSTOM_LOCALE
+import androidx.appcompat.testutils.NightModeActivityTestRule
 import androidx.appcompat.testutils.NightModeUtils.NightSetMode
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWait
 import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
-import androidx.test.rule.ActivityTestRule
-import org.junit.After
 import org.junit.Assert.assertEquals
-import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -40,23 +36,7 @@
 class NightModeCustomConfigurationContextTestCase(private val setMode: NightSetMode) {
 
     @get:Rule
-    val activityRule = ActivityTestRule(
-        NightModeCustomConfigurationActivity::class.java,
-        false,
-        false
-    )
-
-    @Before
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below.
-        activityRule.runOnUiThread {
-            AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
-        }
-
-        // Launch the test activity
-        activityRule.launchActivity(null)
-    }
+    val activityRule = NightModeActivityTestRule(NightModeCustomConfigurationActivity::class.java)
 
     @Test
     @Suppress("DEPRECATION")
@@ -94,18 +74,6 @@
         assertEquals(CUSTOM_FONT_SCALE, config.fontScale)
     }
 
-    @After
-    fun cleanup() {
-        activityRule.finishActivity()
-
-        // Reset the default night mode
-        setNightModeAndWait(
-            activityRule,
-            MODE_NIGHT_NO,
-            NightSetMode.DEFAULT
-        )
-    }
-
     companion object {
         @JvmStatic
         @Parameterized.Parameters
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLateOnCreateTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLateOnCreateTestCase.kt
index b974a82..736520b 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLateOnCreateTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLateOnCreateTestCase.kt
@@ -17,15 +17,14 @@
 package androidx.appcompat.app
 
 import android.content.res.Configuration
+import androidx.appcompat.testutils.NightModeActivityTestRule
 import androidx.appcompat.testutils.NightModeUtils
 import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
 import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
 import androidx.lifecycle.Lifecycle
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
-import androidx.test.rule.ActivityTestRule
-import androidx.testutils.LifecycleOwnerUtils
-import org.junit.Before
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -33,26 +32,13 @@
 @LargeTest
 @RunWith(AndroidJUnit4::class)
 class NightModeLateOnCreateTestCase {
-
     @get:Rule
-    val activityRule = ActivityTestRule(NightModeLateOnCreateActivity::class.java, false, false)
-
-    @Before
-    @Throws(Throwable::class)
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below.
-        activityRule.runOnUiThread {
-            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
-        }
-    }
+    val activityRule = NightModeActivityTestRule(NightModeLateOnCreateActivity::class.java)
 
     @Test
     fun testActivityRecreateLoop() {
-        activityRule.launchActivity(null)
-
         // Activity should be able to reach fully resumed state in default NIGHT_NO.
-        LifecycleOwnerUtils.waitUntilState(activityRule, Lifecycle.State.RESUMED)
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
         assertConfigurationNightModeEquals(
             Configuration.UI_MODE_NIGHT_NO,
             activityRule.activity.resources.configuration
@@ -66,7 +52,7 @@
         )
 
         // Activity should be able to reach fully resumed state again.
-        LifecycleOwnerUtils.waitUntilState(activityRule, Lifecycle.State.RESUMED)
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
 
         // The request night mode value should have been set during attachBaseContext().
         assertConfigurationNightModeEquals(
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLocalOnlyTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLocalOnlyTestCase.kt
new file mode 100644
index 0000000..d5b3dc4
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeLocalOnlyTestCase.kt
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.app
+
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.test.R
+import androidx.appcompat.testutils.NightModeActivityTestRule
+import androidx.appcompat.testutils.NightModeUtils.NightSetMode
+import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.LargeTest
+import org.junit.Assert.assertEquals
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+
+@LargeTest
+@RunWith(AndroidJUnit4::class)
+class NightModeLocalOnlyTestCase {
+    @get:Rule
+    val rule = NightModeActivityTestRule(NightModeActivity::class.java)
+
+    @Test
+    fun testLocalDayNightModeRecreatesActivity() {
+        // Verify first that we're in day mode
+        onView(withId(R.id.text_night_mode)).check(matches(withText(STRING_DAY)))
+
+        // Now force the local night mode to be yes (aka night mode)
+        setNightModeAndWaitForRecreate(rule, MODE_NIGHT_YES, NightSetMode.LOCAL)
+
+        // Assert that the new local night mode is returned
+        assertEquals(MODE_NIGHT_YES, rule.activity.delegate.localNightMode)
+
+        // Now check the text has changed, signifying that night resources are being used
+        onView(withId(R.id.text_night_mode)).check(matches(withText(STRING_NIGHT)))
+    }
+
+    companion object {
+        private const val STRING_DAY = "DAY"
+        private const val STRING_NIGHT = "NIGHT"
+    }
+}
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModePreventOverrideConfigTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModePreventOverrideConfigTestCase.kt
index 5a7e146..075ff08 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModePreventOverrideConfigTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModePreventOverrideConfigTestCase.kt
@@ -16,22 +16,15 @@
 
 package androidx.appcompat.app
 
+import android.content.res.Configuration
 import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.testutils.NightModeActivityTestRule
+import androidx.appcompat.testutils.NightModeUtils.NightSetMode
 import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
 import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
-
-import android.content.res.Configuration
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
-
-import androidx.appcompat.testutils.NightModeUtils.NightSetMode
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWait
 import androidx.lifecycle.Lifecycle
 import androidx.test.filters.LargeTest
-import androidx.test.rule.ActivityTestRule
-import androidx.testutils.LifecycleOwnerUtils
-import org.junit.After
-
-import org.junit.Before
+import androidx.testutils.LifecycleOwnerUtils.waitUntilState
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -40,30 +33,13 @@
 @LargeTest
 @RunWith(Parameterized::class)
 class NightModePreventOverrideConfigTestCase(private val setMode: NightSetMode) {
-
     @get:Rule
-    val activityRule = ActivityTestRule(
-        NightModePreventOverrideConfigActivity::class.java,
-        false,
-        false
-    )
-
-    @Before
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below.
-        activityRule.runOnUiThread {
-            AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
-        }
-
-        // Launch the test activity
-        activityRule.launchActivity(null)
-    }
+    val activityRule = NightModeActivityTestRule(NightModePreventOverrideConfigActivity::class.java)
 
     @Test
     fun testActivityRecreate() {
         // Activity should be able to reach fully resumed state in default NIGHT_NO.
-        LifecycleOwnerUtils.waitUntilState(activityRule, Lifecycle.State.RESUMED)
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
         assertConfigurationNightModeEquals(
             Configuration.UI_MODE_NIGHT_NO,
             activityRule.activity.resources.configuration
@@ -77,7 +53,7 @@
         )
 
         // Activity should be able to reach fully resumed state again.
-        LifecycleOwnerUtils.waitUntilState(activityRule, Lifecycle.State.RESUMED)
+        waitUntilState(activityRule.activity, Lifecycle.State.RESUMED)
 
         // The requested night mode value should have been set by
         // updateResourcesConfigurationForNightMode().
@@ -87,19 +63,6 @@
         )
     }
 
-    @After
-    @Throws(Throwable::class)
-    fun cleanup() {
-        activityRule.finishActivity()
-
-        // Reset the default night mode
-        setNightModeAndWait(
-            activityRule,
-            MODE_NIGHT_NO,
-            NightSetMode.DEFAULT
-        )
-    }
-
     companion object {
         @JvmStatic
         @Parameterized.Parameters
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateDoesNotRecreateActivityTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateDoesNotRecreateActivityTestCase.kt
index bd54923..39eb12e 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateDoesNotRecreateActivityTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateDoesNotRecreateActivityTestCase.kt
@@ -17,28 +17,20 @@
 package androidx.appcompat.app
 
 import android.content.pm.ActivityInfo
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
-import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWait
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
-import androidx.appcompat.testutils.TestUtilsActions.rotateScreenOrientation
-import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.matcher.ViewMatchers.isRoot
-
-import org.junit.Assert.assertNotSame
-import org.junit.Assert.assertSame
-
 import android.content.res.Configuration
 import android.os.Build
-
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.testutils.NightModeActivityTestRule
 import androidx.appcompat.testutils.NightModeUtils.NightSetMode
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
+import androidx.appcompat.testutils.TestUtilsActions.rotateScreenOrientation
 import androidx.appcompat.testutils.TestUtilsActions.setScreenOrientation
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.matcher.ViewMatchers.isRoot
 import androidx.test.filters.LargeTest
-import androidx.test.rule.ActivityTestRule
-
-import org.junit.After
-import org.junit.Before
+import org.junit.Assert.assertNotSame
+import org.junit.Assert.assertSame
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -47,25 +39,8 @@
 @LargeTest
 @RunWith(Parameterized::class)
 class NightModeRotateDoesNotRecreateActivityTestCase(private val setMode: NightSetMode) {
-
     @get:Rule
-    val activityRule = ActivityTestRule(
-        NightModeRotateDoesNotRecreateActivity::class.java,
-        false,
-        false
-    )
-
-    @Before
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below.
-        activityRule.runOnUiThread {
-            AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
-        }
-
-        // Launch the test activity
-        activityRule.launchActivity(null)
-    }
+    val activityRule = NightModeActivityTestRule(NightModeRotateDoesNotRecreateActivity::class.java)
 
     @Test
     fun testRotateDoesNotRecreateActivity() {
@@ -112,18 +87,6 @@
         activity.expectOnConfigurationChange(5000)
     }
 
-    @After
-    fun cleanup() {
-        activityRule.finishActivity()
-
-        // Reset the default night mode
-        setNightModeAndWait(
-            activityRule,
-            MODE_NIGHT_NO,
-            NightSetMode.DEFAULT
-        )
-    }
-
     companion object {
         @JvmStatic
         @Parameterized.Parameters
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateRecreatesActivityWithConfigTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateRecreatesActivityWithConfigTestCase.kt
index 29ce98f..584ca00 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateRecreatesActivityWithConfigTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeRotateRecreatesActivityWithConfigTestCase.kt
@@ -16,24 +16,17 @@
 
 package androidx.appcompat.app
 
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
-import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
-import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWait
-import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
-
-import org.junit.Assert.assertNotSame
-
 import android.content.res.Configuration
 import android.os.Build
-
-import androidx.appcompat.testutils.NightModeUtils
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.testutils.NightModeActivityTestRule
 import androidx.appcompat.testutils.NightModeUtils.NightSetMode
+import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
+import androidx.appcompat.testutils.NightModeUtils.resetRotateAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils.rotateAndWaitForRecreate
+import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
 import androidx.test.filters.LargeTest
-import androidx.test.rule.ActivityTestRule
-
-import org.junit.After
-import org.junit.Before
+import org.junit.Assert.assertNotSame
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -42,26 +35,8 @@
 @LargeTest
 @RunWith(Parameterized::class)
 class NightModeRotateRecreatesActivityWithConfigTestCase(private val setMode: NightSetMode) {
-
     @get:Rule
-    val activityRule = ActivityTestRule(
-        // Use the basic DayNight-themed activity.
-        NightModeActivity::class.java,
-        false,
-        false
-    )
-
-    @Before
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below.
-        activityRule.runOnUiThread {
-            AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
-        }
-
-        // Launch the test activity
-        activityRule.launchActivity(null)
-    }
+    val activityRule = NightModeActivityTestRule(NightModeActivity::class.java)
 
     @Test
     fun testRotateRecreatesActivityWithConfig() {
@@ -83,7 +58,7 @@
         // Assert that the current Activity is 'dark'
         assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_YES, config)
 
-        NightModeUtils.rotateAndWaitForRecreate(activityRule)
+        rotateAndWaitForRecreate(activityRule.activity)
 
         // Assert that we got a new activity.
         val activity2 = activityRule.activity
@@ -95,19 +70,7 @@
         assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_YES, config2)
 
         // Reset the requested orientation and wait for it to apply.
-        NightModeUtils.resetRotateAndWaitForRecreate(activityRule)
-    }
-
-    @After
-    fun cleanup() {
-        activityRule.finishActivity()
-
-        // Reset the default night mode
-        setNightModeAndWait(
-            activityRule,
-            MODE_NIGHT_NO,
-            NightSetMode.DEFAULT
-        )
+        resetRotateAndWaitForRecreate(activityRule.activity)
     }
 
     companion object {
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
index 72c81da..bb958fb 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/app/NightModeTestCase.kt
@@ -17,42 +17,36 @@
 package androidx.appcompat.app
 
 import android.content.Context
+import android.content.res.Configuration
+import android.location.LocationManager
+import android.webkit.WebView
 import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
 import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
 import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
+import androidx.appcompat.test.R
+import androidx.appcompat.testutils.NightModeActivityTestRule
+import androidx.appcompat.testutils.NightModeUtils.NightSetMode
 import androidx.appcompat.testutils.NightModeUtils.assertConfigurationNightModeEquals
 import androidx.appcompat.testutils.NightModeUtils.isSystemNightThemeEnabled
 import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWait
 import androidx.appcompat.testutils.NightModeUtils.setNightModeAndWaitForRecreate
 import androidx.appcompat.testutils.TestUtilsMatchers.isBackground
+import androidx.core.content.ContextCompat
 import androidx.test.espresso.Espresso.onView
 import androidx.test.espresso.assertion.ViewAssertions.matches
 import androidx.test.espresso.matcher.ViewMatchers.withId
 import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.filters.LargeTest
+import androidx.test.platform.app.InstrumentationRegistry
 import androidx.testutils.LifecycleOwnerUtils.waitForRecreation
-
+import androidx.testutils.waitForExecution
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNull
-
-import android.content.res.Configuration
-import android.location.LocationManager
-import android.webkit.WebView
-
-import androidx.appcompat.test.R
-import androidx.appcompat.testutils.NightModeUtils.NightSetMode
-import androidx.core.content.ContextCompat
-import androidx.test.filters.LargeTest
-import androidx.test.platform.app.InstrumentationRegistry
-import androidx.test.rule.ActivityTestRule
-
-import org.junit.After
-import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.Parameterized
-
 import java.util.concurrent.CountDownLatch
 
 @Suppress("DEPRECATION")
@@ -60,36 +54,7 @@
 @RunWith(Parameterized::class)
 class NightModeTestCase(private val setMode: NightSetMode) {
     @get:Rule
-    val rule = ActivityTestRule(NightModeActivity::class.java, false, false)
-
-    @Before
-    fun setup() {
-        // By default we'll set the night mode to NO, which allows us to make better
-        // assumptions in the test below
-        AppCompatDelegate.setDefaultNightMode(MODE_NIGHT_NO)
-        // Now launch the test activity
-        rule.launchActivity(null)
-    }
-
-    @Test
-    fun testLocalDayNightModeRecreatesActivity() {
-        if (setMode != NightSetMode.LOCAL) {
-            // This test is only applicable when using setLocalNightMode
-            return
-        }
-
-        // Verify first that we're in day mode
-        onView(withId(R.id.text_night_mode)).check(matches(withText(STRING_DAY)))
-
-        // Now force the local night mode to be yes (aka night mode)
-        setNightModeAndWaitForRecreate(rule, MODE_NIGHT_YES, setMode)
-
-        // Assert that the new local night mode is returned
-        assertEquals(MODE_NIGHT_YES, rule.activity.delegate.localNightMode)
-
-        // Now check the text has changed, signifying that night resources are being used
-        onView(withId(R.id.text_night_mode)).check(matches(withText(STRING_NIGHT)))
-    }
+    val rule = NightModeActivityTestRule(NightModeActivity::class.java)
 
     @Test
     fun testSwitchingYesDoesNotAffectApplication() {
@@ -234,9 +199,14 @@
         assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_YES, rule.activity)
 
         // Now show a AppCompatDialog
+        lateinit var dialog: AppCompatDialog
         rule.runOnUiThread {
-            AppCompatDialog(rule.activity).show()
+            dialog = AppCompatDialog(rule.activity)
+            dialog.show()
         }
+        rule.waitForExecution()
+        // Now dismiss the dialog
+        rule.runOnUiThread { dialog.dismiss() }
 
         // Assert that the uiMode is unchanged
         assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_YES, rule.activity)
@@ -244,9 +214,11 @@
 
     @Test
     fun testLoadingWebViewMaintainsConfiguration() {
+        // Assert that the context has a non-night themed configuration
+        assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_NO, rule.activity)
+
         // Set night mode and wait for the new Activity
         setNightModeAndWaitForRecreate(rule, MODE_NIGHT_YES, setMode)
-
         // Assert that the context still has a night themed configuration
         assertConfigurationNightModeEquals(Configuration.UI_MODE_NIGHT_YES, rule.activity)
 
@@ -258,21 +230,19 @@
     }
 
     @Test
-    fun testDialogCleansUpAutoMode() {
-        rule.runOnUiThread {
-            val dialog = AppCompatDialog(rule.activity)
-            val delegate = dialog.delegate as AppCompatDelegateImpl
+    fun testDialogCleansUpAutoMode() = rule.runOnUiThread {
+        val dialog = AppCompatDialog(rule.activity)
+        val delegate = dialog.delegate as AppCompatDelegateImpl
 
-            // Set the local night mode of the Dialog to be an AUTO mode
-            delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_AUTO_TIME
+        // Set the local night mode of the Dialog to be an AUTO mode
+        delegate.localNightMode = AppCompatDelegate.MODE_NIGHT_AUTO_TIME
 
-            // Now show and dismiss the dialog
-            dialog.show()
-            dialog.dismiss()
+        // Now show and dismiss the dialog
+        dialog.show()
+        dialog.dismiss()
 
-            // Assert that the auto manager is destroyed (not listening)
-            assertFalse(delegate.autoTimeNightModeManager.isListening)
-        }
+        // Assert that the auto manager is destroyed (not listening)
+        assertFalse(delegate.autoTimeNightModeManager.isListening)
     }
 
     @Test
@@ -290,13 +260,6 @@
         assertNull(activity.lastConfigurationChangeAndClear)
     }
 
-    @After
-    fun cleanup() {
-        rule.finishActivity()
-        // Reset the default night mode
-        setNightModeAndWait(rule, MODE_NIGHT_NO, NightSetMode.DEFAULT)
-    }
-
     private class FakeTwilightManager(context: Context) : TwilightManager(
         context,
         ContextCompat.getSystemService(context, LocationManager::class.java)!!
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeActivityTestRule.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeActivityTestRule.kt
new file mode 100644
index 0000000..4b97605
--- /dev/null
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeActivityTestRule.kt
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.appcompat.testutils
+
+import androidx.appcompat.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.test.rule.ActivityTestRule
+
+class NightModeActivityTestRule<T : AppCompatActivity>(
+    activityClazz: Class<T>,
+    initialTouchMode: Boolean = false,
+    launchActivity: Boolean = true
+) : ActivityTestRule<T>(activityClazz, initialTouchMode, launchActivity) {
+    override fun beforeActivityLaunched() {
+        // By default we'll set the night mode to NO, which allows us to make better
+        // assumptions in the test below
+        runOnUiThread {
+            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
+        }
+    }
+
+    override fun afterActivityFinished() {
+        // Reset the default night mode
+        runOnUiThread {
+            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
+        }
+    }
+}
\ No newline at end of file
diff --git a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeUtils.kt b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeUtils.kt
index c3f7a31..c24369a 100644
--- a/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeUtils.kt
+++ b/appcompat/appcompat/src/androidTest/java/androidx/appcompat/testutils/NightModeUtils.kt
@@ -16,8 +16,6 @@
 
 package androidx.appcompat.testutils
 
-import org.junit.Assert.assertEquals
-
 import android.app.UiModeManager
 import android.content.Context
 import android.content.pm.ActivityInfo
@@ -30,6 +28,7 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.rule.ActivityTestRule
 import androidx.testutils.LifecycleOwnerUtils
+import org.junit.Assert.assertEquals
 
 object NightModeUtils {
     private const val LOG_TAG = "NightModeUtils"
@@ -95,9 +94,13 @@
         activityRule: ActivityTestRule<T>,
         @NightMode nightMode: Int,
         setMode: NightSetMode
-    ) {
-        val activity = activityRule.activity
+    ): T = setNightModeAndWaitForRecreate(activityRule.activity, nightMode, setMode)
 
+    fun <T : AppCompatActivity> setNightModeAndWaitForRecreate(
+        activity: T,
+        @NightMode nightMode: Int,
+        setMode: NightSetMode
+    ): T {
         Log.d(
             LOG_TAG, "setNightModeAndWaitForRecreate on Activity: " + activity +
                     " to mode: " + nightMode +
@@ -105,23 +108,20 @@
         )
 
         // Wait for the Activity to be resumed and visible
-        LifecycleOwnerUtils.waitUntilState(activity, activityRule, Lifecycle.State.RESUMED)
+        LifecycleOwnerUtils.waitUntilState(activity, Lifecycle.State.RESUMED)
 
         // Now perform night mode change wait for the Activity to be recreated
-        LifecycleOwnerUtils.waitForRecreation(activity, activityRule) {
+        return LifecycleOwnerUtils.waitForRecreation(activity) {
             setNightMode(nightMode, activity, setMode)
         }
     }
 
-    fun <T : AppCompatActivity> rotateAndWaitForRecreate(
-        activityRule: ActivityTestRule<T>
-    ) {
+    fun <T : AppCompatActivity> rotateAndWaitForRecreate(activity: T): T {
         Log.e(LOG_TAG, "request rotate")
-        val activity = activityRule.activity
-        LifecycleOwnerUtils.waitUntilState(activity, activityRule, Lifecycle.State.RESUMED)
+        LifecycleOwnerUtils.waitUntilState(activity, Lifecycle.State.RESUMED)
 
         // Now perform rotation and wait for the Activity to be recreated
-        LifecycleOwnerUtils.waitForRecreation(activity, activityRule) {
+        return LifecycleOwnerUtils.waitForRecreation(activity) {
             Log.e(LOG_TAG, "request rotate on ui thread")
             if (activity.resources.configuration.orientation ==
                 Configuration.ORIENTATION_LANDSCAPE) {
@@ -133,13 +133,10 @@
         }
     }
 
-    fun <T : AppCompatActivity> resetRotateAndWaitForRecreate(
-        activityRule: ActivityTestRule<T>
-    ) {
-        val activity = activityRule.activity
-        LifecycleOwnerUtils.waitUntilState(activity, activityRule, Lifecycle.State.RESUMED)
+    fun <T : AppCompatActivity> resetRotateAndWaitForRecreate(activity: T) {
+        LifecycleOwnerUtils.waitUntilState(activity, Lifecycle.State.RESUMED)
 
-        LifecycleOwnerUtils.waitForRecreation(activity, activityRule) {
+        LifecycleOwnerUtils.waitForRecreation(activity) {
             activity.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
         }
     }
@@ -153,11 +150,8 @@
         @NightMode nightMode: Int,
         activity: AppCompatActivity?,
         setMode: NightSetMode
-    ) {
-        if (setMode == NightSetMode.DEFAULT) {
-            AppCompatDelegate.setDefaultNightMode(nightMode)
-        } else {
-            activity!!.delegate.localNightMode = nightMode
-        }
+    ) = when (setMode) {
+        NightSetMode.DEFAULT -> AppCompatDelegate.setDefaultNightMode(nightMode)
+        NightSetMode.LOCAL -> activity!!.delegate.localNightMode = nightMode
     }
 }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
index 6d462f1..c869e11 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDelegateImpl.java
@@ -129,8 +129,7 @@
 class AppCompatDelegateImpl extends AppCompatDelegate
         implements MenuBuilder.Callback, LayoutInflater.Factory2 {
 
-    private static final SimpleArrayMap<Class<?>, Integer> sLocalNightModes =
-            new SimpleArrayMap<>();
+    private static final SimpleArrayMap<String, Integer> sLocalNightModes = new SimpleArrayMap<>();
 
     private static final boolean DEBUG = false;
     private static final boolean IS_PRE_LOLLIPOP = Build.VERSION.SDK_INT < 21;
@@ -139,13 +138,12 @@
 
     /**
      * AppCompat selectively uses an override configuration for DayNight functionality.
-     * Unfortunately the framework has a few issues around Resources instances on SDKs 21-25,
+     * Unfortunately the framework has a few issues around Resources instances,
      * resulting in the root Resources instance (i.e. Application) being modified when it
      * shouldn't be. We can work around it by always calling using an override configuration
      * where available, to force a local resources instance being used.
      */
-    private static final boolean sAlwaysOverrideConfiguration = Build.VERSION.SDK_INT >= 21
-            && Build.VERSION.SDK_INT <= 25;
+    private static final boolean sAlwaysOverrideConfiguration = true;
 
     private static boolean sInstalledExceptionHandler;
 
@@ -312,11 +310,11 @@
         }
         if (mLocalNightMode == MODE_NIGHT_UNSPECIFIED) {
             // Try and read the current night mode from our static store
-            final Integer value = sLocalNightModes.get(mHost.getClass());
+            final Integer value = sLocalNightModes.get(mHost.getClass().getName());
             if (value != null) {
                 mLocalNightMode = value;
                 // Finally remove the value
-                sLocalNightModes.remove(mHost.getClass());
+                sLocalNightModes.remove(mHost.getClass().getName());
             }
         }
 
@@ -366,6 +364,10 @@
             final int newNightMode = config.uiMode & Configuration.UI_MODE_NIGHT_MASK;
 
             if (sAlwaysOverrideConfiguration || currentNightMode != newNightMode) {
+                if (DEBUG) {
+                    Log.d(TAG, String.format("Applying night mode using "
+                            + "createConfigurationContext(). Config: %s", config.toString()));
+                }
                 // If the target night mode is different to the new night mode, return a
                 // configuration context with the new config.
                 return super.attachBaseContext2(baseContext.createConfigurationContext(config));
@@ -563,12 +565,6 @@
         if (ab != null) {
             ab.setShowHideAnimationEnabled(false);
         }
-
-        if (mHost instanceof Dialog) {
-            // If the host is a Dialog, we should clean up the Auto managers now. This is
-            // because Dialogs do not have an onDestroy()
-            cleanupAutoManagers();
-        }
     }
 
     @Override
@@ -616,10 +612,6 @@
 
     @Override
     public void onSaveInstanceState(Bundle outState) {
-        if (mLocalNightMode != MODE_NIGHT_UNSPECIFIED) {
-            // If we have a local night mode set, save it
-            sLocalNightModes.put(mHost.getClass(), mLocalNightMode);
-        }
     }
 
     @Override
@@ -634,6 +626,15 @@
         mStarted = false;
         mIsDestroyed = true;
 
+        if (mLocalNightMode != MODE_NIGHT_UNSPECIFIED
+                && mHost instanceof Activity
+                && ((Activity) mHost).isChangingConfigurations()) {
+            // If we have a local night mode set, save it
+            sLocalNightModes.put(mHost.getClass().getName(), mLocalNightMode);
+        } else {
+            sLocalNightModes.remove(mHost.getClass().getName());
+        }
+
         if (mActionBar != null) {
             mActionBar.onDestroy();
         }
diff --git a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
index 865d6f5..d40a697 100644
--- a/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
+++ b/appcompat/appcompat/src/main/java/androidx/appcompat/app/AppCompatDialog.java
@@ -135,6 +135,13 @@
         getDelegate().onStop();
     }
 
+    @Override
+    public void dismiss() {
+        super.dismiss();
+        // There is no onDestroy in Dialog, so we simulate it from dismiss()
+        getDelegate().onDestroy();
+    }
+
     /**
      * Enable extended support library window features.
      * <p>
diff --git a/biometric/build.gradle b/biometric/build.gradle
index ff616ea..381bc39 100644
--- a/biometric/build.gradle
+++ b/biometric/build.gradle
@@ -32,10 +32,6 @@
 }
 
 android {
-    sourceSets {
-        main.res.srcDirs 'res'
-    }
-
     aaptOptions {
         noCompress 'ttf'
     }
diff --git a/biometric/res/color-v26/biometric_error_color.xml b/biometric/src/main/res/color-v26/biometric_error_color.xml
similarity index 100%
rename from biometric/res/color-v26/biometric_error_color.xml
rename to biometric/src/main/res/color-v26/biometric_error_color.xml
diff --git a/biometric/res/drawable-v23/fingerprint_dialog_error_to_fp.xml b/biometric/src/main/res/drawable-v23/fingerprint_dialog_error_to_fp.xml
similarity index 100%
rename from biometric/res/drawable-v23/fingerprint_dialog_error_to_fp.xml
rename to biometric/src/main/res/drawable-v23/fingerprint_dialog_error_to_fp.xml
diff --git a/biometric/res/drawable-v23/fingerprint_dialog_fp_to_error.xml b/biometric/src/main/res/drawable-v23/fingerprint_dialog_fp_to_error.xml
similarity index 100%
rename from biometric/res/drawable-v23/fingerprint_dialog_fp_to_error.xml
rename to biometric/src/main/res/drawable-v23/fingerprint_dialog_fp_to_error.xml
diff --git a/biometric/res/layout/device_credential_handler_activity.xml b/biometric/src/main/res/layout/device_credential_handler_activity.xml
similarity index 100%
rename from biometric/res/layout/device_credential_handler_activity.xml
rename to biometric/src/main/res/layout/device_credential_handler_activity.xml
diff --git a/biometric/res/layout/fingerprint_dialog_layout.xml b/biometric/src/main/res/layout/fingerprint_dialog_layout.xml
similarity index 100%
rename from biometric/res/layout/fingerprint_dialog_layout.xml
rename to biometric/src/main/res/layout/fingerprint_dialog_layout.xml
diff --git a/biometric/res/values-af/strings.xml b/biometric/src/main/res/values-af/strings.xml
similarity index 100%
rename from biometric/res/values-af/strings.xml
rename to biometric/src/main/res/values-af/strings.xml
diff --git a/biometric/res/values-am/strings.xml b/biometric/src/main/res/values-am/strings.xml
similarity index 100%
rename from biometric/res/values-am/strings.xml
rename to biometric/src/main/res/values-am/strings.xml
diff --git a/biometric/res/values-ar/strings.xml b/biometric/src/main/res/values-ar/strings.xml
similarity index 100%
rename from biometric/res/values-ar/strings.xml
rename to biometric/src/main/res/values-ar/strings.xml
diff --git a/biometric/res/values-as/strings.xml b/biometric/src/main/res/values-as/strings.xml
similarity index 100%
rename from biometric/res/values-as/strings.xml
rename to biometric/src/main/res/values-as/strings.xml
diff --git a/biometric/res/values-az/strings.xml b/biometric/src/main/res/values-az/strings.xml
similarity index 100%
rename from biometric/res/values-az/strings.xml
rename to biometric/src/main/res/values-az/strings.xml
diff --git a/biometric/res/values-b+sr+Latn/strings.xml b/biometric/src/main/res/values-b+sr+Latn/strings.xml
similarity index 100%
rename from biometric/res/values-b+sr+Latn/strings.xml
rename to biometric/src/main/res/values-b+sr+Latn/strings.xml
diff --git a/biometric/res/values-be/strings.xml b/biometric/src/main/res/values-be/strings.xml
similarity index 100%
rename from biometric/res/values-be/strings.xml
rename to biometric/src/main/res/values-be/strings.xml
diff --git a/biometric/res/values-bg/strings.xml b/biometric/src/main/res/values-bg/strings.xml
similarity index 100%
rename from biometric/res/values-bg/strings.xml
rename to biometric/src/main/res/values-bg/strings.xml
diff --git a/biometric/res/values-bn/strings.xml b/biometric/src/main/res/values-bn/strings.xml
similarity index 100%
rename from biometric/res/values-bn/strings.xml
rename to biometric/src/main/res/values-bn/strings.xml
diff --git a/biometric/res/values-bs/strings.xml b/biometric/src/main/res/values-bs/strings.xml
similarity index 100%
rename from biometric/res/values-bs/strings.xml
rename to biometric/src/main/res/values-bs/strings.xml
diff --git a/biometric/res/values-ca/strings.xml b/biometric/src/main/res/values-ca/strings.xml
similarity index 100%
rename from biometric/res/values-ca/strings.xml
rename to biometric/src/main/res/values-ca/strings.xml
diff --git a/biometric/res/values-cs/strings.xml b/biometric/src/main/res/values-cs/strings.xml
similarity index 100%
rename from biometric/res/values-cs/strings.xml
rename to biometric/src/main/res/values-cs/strings.xml
diff --git a/biometric/res/values-da/strings.xml b/biometric/src/main/res/values-da/strings.xml
similarity index 100%
rename from biometric/res/values-da/strings.xml
rename to biometric/src/main/res/values-da/strings.xml
diff --git a/biometric/res/values-de/strings.xml b/biometric/src/main/res/values-de/strings.xml
similarity index 100%
rename from biometric/res/values-de/strings.xml
rename to biometric/src/main/res/values-de/strings.xml
diff --git a/biometric/res/values-el/strings.xml b/biometric/src/main/res/values-el/strings.xml
similarity index 100%
rename from biometric/res/values-el/strings.xml
rename to biometric/src/main/res/values-el/strings.xml
diff --git a/biometric/res/values-en-rAU/strings.xml b/biometric/src/main/res/values-en-rAU/strings.xml
similarity index 100%
rename from biometric/res/values-en-rAU/strings.xml
rename to biometric/src/main/res/values-en-rAU/strings.xml
diff --git a/biometric/res/values-en-rCA/strings.xml b/biometric/src/main/res/values-en-rCA/strings.xml
similarity index 100%
rename from biometric/res/values-en-rCA/strings.xml
rename to biometric/src/main/res/values-en-rCA/strings.xml
diff --git a/biometric/res/values-en-rGB/strings.xml b/biometric/src/main/res/values-en-rGB/strings.xml
similarity index 100%
rename from biometric/res/values-en-rGB/strings.xml
rename to biometric/src/main/res/values-en-rGB/strings.xml
diff --git a/biometric/res/values-en-rIN/strings.xml b/biometric/src/main/res/values-en-rIN/strings.xml
similarity index 100%
rename from biometric/res/values-en-rIN/strings.xml
rename to biometric/src/main/res/values-en-rIN/strings.xml
diff --git a/biometric/res/values-en-rXC/strings.xml b/biometric/src/main/res/values-en-rXC/strings.xml
similarity index 100%
rename from biometric/res/values-en-rXC/strings.xml
rename to biometric/src/main/res/values-en-rXC/strings.xml
diff --git a/biometric/res/values-es-rUS/strings.xml b/biometric/src/main/res/values-es-rUS/strings.xml
similarity index 100%
rename from biometric/res/values-es-rUS/strings.xml
rename to biometric/src/main/res/values-es-rUS/strings.xml
diff --git a/biometric/res/values-es/strings.xml b/biometric/src/main/res/values-es/strings.xml
similarity index 100%
rename from biometric/res/values-es/strings.xml
rename to biometric/src/main/res/values-es/strings.xml
diff --git a/biometric/res/values-et/strings.xml b/biometric/src/main/res/values-et/strings.xml
similarity index 100%
rename from biometric/res/values-et/strings.xml
rename to biometric/src/main/res/values-et/strings.xml
diff --git a/biometric/res/values-eu/strings.xml b/biometric/src/main/res/values-eu/strings.xml
similarity index 100%
rename from biometric/res/values-eu/strings.xml
rename to biometric/src/main/res/values-eu/strings.xml
diff --git a/biometric/res/values-fa/strings.xml b/biometric/src/main/res/values-fa/strings.xml
similarity index 100%
rename from biometric/res/values-fa/strings.xml
rename to biometric/src/main/res/values-fa/strings.xml
diff --git a/biometric/res/values-fi/strings.xml b/biometric/src/main/res/values-fi/strings.xml
similarity index 100%
rename from biometric/res/values-fi/strings.xml
rename to biometric/src/main/res/values-fi/strings.xml
diff --git a/biometric/res/values-fr-rCA/strings.xml b/biometric/src/main/res/values-fr-rCA/strings.xml
similarity index 100%
rename from biometric/res/values-fr-rCA/strings.xml
rename to biometric/src/main/res/values-fr-rCA/strings.xml
diff --git a/biometric/res/values-fr/strings.xml b/biometric/src/main/res/values-fr/strings.xml
similarity index 100%
rename from biometric/res/values-fr/strings.xml
rename to biometric/src/main/res/values-fr/strings.xml
diff --git a/biometric/res/values-gl/strings.xml b/biometric/src/main/res/values-gl/strings.xml
similarity index 100%
rename from biometric/res/values-gl/strings.xml
rename to biometric/src/main/res/values-gl/strings.xml
diff --git a/biometric/res/values-gu/strings.xml b/biometric/src/main/res/values-gu/strings.xml
similarity index 100%
rename from biometric/res/values-gu/strings.xml
rename to biometric/src/main/res/values-gu/strings.xml
diff --git a/biometric/res/values-hi/strings.xml b/biometric/src/main/res/values-hi/strings.xml
similarity index 100%
rename from biometric/res/values-hi/strings.xml
rename to biometric/src/main/res/values-hi/strings.xml
diff --git a/biometric/res/values-hr/strings.xml b/biometric/src/main/res/values-hr/strings.xml
similarity index 100%
rename from biometric/res/values-hr/strings.xml
rename to biometric/src/main/res/values-hr/strings.xml
diff --git a/biometric/res/values-hu/strings.xml b/biometric/src/main/res/values-hu/strings.xml
similarity index 100%
rename from biometric/res/values-hu/strings.xml
rename to biometric/src/main/res/values-hu/strings.xml
diff --git a/biometric/res/values-hy/strings.xml b/biometric/src/main/res/values-hy/strings.xml
similarity index 100%
rename from biometric/res/values-hy/strings.xml
rename to biometric/src/main/res/values-hy/strings.xml
diff --git a/biometric/res/values-in/strings.xml b/biometric/src/main/res/values-in/strings.xml
similarity index 100%
rename from biometric/res/values-in/strings.xml
rename to biometric/src/main/res/values-in/strings.xml
diff --git a/biometric/res/values-is/strings.xml b/biometric/src/main/res/values-is/strings.xml
similarity index 100%
rename from biometric/res/values-is/strings.xml
rename to biometric/src/main/res/values-is/strings.xml
diff --git a/biometric/res/values-it/strings.xml b/biometric/src/main/res/values-it/strings.xml
similarity index 100%
rename from biometric/res/values-it/strings.xml
rename to biometric/src/main/res/values-it/strings.xml
diff --git a/biometric/res/values-iw/strings.xml b/biometric/src/main/res/values-iw/strings.xml
similarity index 100%
rename from biometric/res/values-iw/strings.xml
rename to biometric/src/main/res/values-iw/strings.xml
diff --git a/biometric/res/values-ja/strings.xml b/biometric/src/main/res/values-ja/strings.xml
similarity index 100%
rename from biometric/res/values-ja/strings.xml
rename to biometric/src/main/res/values-ja/strings.xml
diff --git a/biometric/res/values-ka/strings.xml b/biometric/src/main/res/values-ka/strings.xml
similarity index 100%
rename from biometric/res/values-ka/strings.xml
rename to biometric/src/main/res/values-ka/strings.xml
diff --git a/biometric/res/values-kk/strings.xml b/biometric/src/main/res/values-kk/strings.xml
similarity index 100%
rename from biometric/res/values-kk/strings.xml
rename to biometric/src/main/res/values-kk/strings.xml
diff --git a/biometric/res/values-km/strings.xml b/biometric/src/main/res/values-km/strings.xml
similarity index 100%
rename from biometric/res/values-km/strings.xml
rename to biometric/src/main/res/values-km/strings.xml
diff --git a/biometric/res/values-kn/strings.xml b/biometric/src/main/res/values-kn/strings.xml
similarity index 100%
rename from biometric/res/values-kn/strings.xml
rename to biometric/src/main/res/values-kn/strings.xml
diff --git a/biometric/res/values-ko/strings.xml b/biometric/src/main/res/values-ko/strings.xml
similarity index 100%
rename from biometric/res/values-ko/strings.xml
rename to biometric/src/main/res/values-ko/strings.xml
diff --git a/biometric/res/values-ky/strings.xml b/biometric/src/main/res/values-ky/strings.xml
similarity index 100%
rename from biometric/res/values-ky/strings.xml
rename to biometric/src/main/res/values-ky/strings.xml
diff --git a/biometric/res/values-lo/strings.xml b/biometric/src/main/res/values-lo/strings.xml
similarity index 100%
rename from biometric/res/values-lo/strings.xml
rename to biometric/src/main/res/values-lo/strings.xml
diff --git a/biometric/res/values-lt/strings.xml b/biometric/src/main/res/values-lt/strings.xml
similarity index 100%
rename from biometric/res/values-lt/strings.xml
rename to biometric/src/main/res/values-lt/strings.xml
diff --git a/biometric/res/values-lv/strings.xml b/biometric/src/main/res/values-lv/strings.xml
similarity index 100%
rename from biometric/res/values-lv/strings.xml
rename to biometric/src/main/res/values-lv/strings.xml
diff --git a/biometric/res/values-mk/strings.xml b/biometric/src/main/res/values-mk/strings.xml
similarity index 100%
rename from biometric/res/values-mk/strings.xml
rename to biometric/src/main/res/values-mk/strings.xml
diff --git a/biometric/res/values-ml/strings.xml b/biometric/src/main/res/values-ml/strings.xml
similarity index 100%
rename from biometric/res/values-ml/strings.xml
rename to biometric/src/main/res/values-ml/strings.xml
diff --git a/biometric/res/values-mn/strings.xml b/biometric/src/main/res/values-mn/strings.xml
similarity index 100%
rename from biometric/res/values-mn/strings.xml
rename to biometric/src/main/res/values-mn/strings.xml
diff --git a/biometric/res/values-mr/strings.xml b/biometric/src/main/res/values-mr/strings.xml
similarity index 100%
rename from biometric/res/values-mr/strings.xml
rename to biometric/src/main/res/values-mr/strings.xml
diff --git a/biometric/res/values-ms/strings.xml b/biometric/src/main/res/values-ms/strings.xml
similarity index 100%
rename from biometric/res/values-ms/strings.xml
rename to biometric/src/main/res/values-ms/strings.xml
diff --git a/biometric/res/values-my/strings.xml b/biometric/src/main/res/values-my/strings.xml
similarity index 100%
rename from biometric/res/values-my/strings.xml
rename to biometric/src/main/res/values-my/strings.xml
diff --git a/biometric/res/values-nb/strings.xml b/biometric/src/main/res/values-nb/strings.xml
similarity index 100%
rename from biometric/res/values-nb/strings.xml
rename to biometric/src/main/res/values-nb/strings.xml
diff --git a/biometric/res/values-ne/strings.xml b/biometric/src/main/res/values-ne/strings.xml
similarity index 100%
rename from biometric/res/values-ne/strings.xml
rename to biometric/src/main/res/values-ne/strings.xml
diff --git a/biometric/res/values-nl/strings.xml b/biometric/src/main/res/values-nl/strings.xml
similarity index 100%
rename from biometric/res/values-nl/strings.xml
rename to biometric/src/main/res/values-nl/strings.xml
diff --git a/biometric/res/values-or/strings.xml b/biometric/src/main/res/values-or/strings.xml
similarity index 100%
rename from biometric/res/values-or/strings.xml
rename to biometric/src/main/res/values-or/strings.xml
diff --git a/biometric/res/values-pa/strings.xml b/biometric/src/main/res/values-pa/strings.xml
similarity index 100%
rename from biometric/res/values-pa/strings.xml
rename to biometric/src/main/res/values-pa/strings.xml
diff --git a/biometric/res/values-pl/strings.xml b/biometric/src/main/res/values-pl/strings.xml
similarity index 100%
rename from biometric/res/values-pl/strings.xml
rename to biometric/src/main/res/values-pl/strings.xml
diff --git a/biometric/res/values-pt-rBR/strings.xml b/biometric/src/main/res/values-pt-rBR/strings.xml
similarity index 100%
rename from biometric/res/values-pt-rBR/strings.xml
rename to biometric/src/main/res/values-pt-rBR/strings.xml
diff --git a/biometric/res/values-pt-rPT/strings.xml b/biometric/src/main/res/values-pt-rPT/strings.xml
similarity index 100%
rename from biometric/res/values-pt-rPT/strings.xml
rename to biometric/src/main/res/values-pt-rPT/strings.xml
diff --git a/biometric/res/values-pt/strings.xml b/biometric/src/main/res/values-pt/strings.xml
similarity index 100%
rename from biometric/res/values-pt/strings.xml
rename to biometric/src/main/res/values-pt/strings.xml
diff --git a/biometric/res/values-ro/strings.xml b/biometric/src/main/res/values-ro/strings.xml
similarity index 100%
rename from biometric/res/values-ro/strings.xml
rename to biometric/src/main/res/values-ro/strings.xml
diff --git a/biometric/res/values-ru/strings.xml b/biometric/src/main/res/values-ru/strings.xml
similarity index 100%
rename from biometric/res/values-ru/strings.xml
rename to biometric/src/main/res/values-ru/strings.xml
diff --git a/biometric/res/values-si/strings.xml b/biometric/src/main/res/values-si/strings.xml
similarity index 100%
rename from biometric/res/values-si/strings.xml
rename to biometric/src/main/res/values-si/strings.xml
diff --git a/biometric/res/values-sk/strings.xml b/biometric/src/main/res/values-sk/strings.xml
similarity index 100%
rename from biometric/res/values-sk/strings.xml
rename to biometric/src/main/res/values-sk/strings.xml
diff --git a/biometric/res/values-sl/strings.xml b/biometric/src/main/res/values-sl/strings.xml
similarity index 100%
rename from biometric/res/values-sl/strings.xml
rename to biometric/src/main/res/values-sl/strings.xml
diff --git a/biometric/res/values-sq/strings.xml b/biometric/src/main/res/values-sq/strings.xml
similarity index 100%
rename from biometric/res/values-sq/strings.xml
rename to biometric/src/main/res/values-sq/strings.xml
diff --git a/biometric/res/values-sr/strings.xml b/biometric/src/main/res/values-sr/strings.xml
similarity index 100%
rename from biometric/res/values-sr/strings.xml
rename to biometric/src/main/res/values-sr/strings.xml
diff --git a/biometric/res/values-sv/strings.xml b/biometric/src/main/res/values-sv/strings.xml
similarity index 100%
rename from biometric/res/values-sv/strings.xml
rename to biometric/src/main/res/values-sv/strings.xml
diff --git a/biometric/res/values-sw/strings.xml b/biometric/src/main/res/values-sw/strings.xml
similarity index 100%
rename from biometric/res/values-sw/strings.xml
rename to biometric/src/main/res/values-sw/strings.xml
diff --git a/biometric/res/values-ta/strings.xml b/biometric/src/main/res/values-ta/strings.xml
similarity index 100%
rename from biometric/res/values-ta/strings.xml
rename to biometric/src/main/res/values-ta/strings.xml
diff --git a/biometric/res/values-te/strings.xml b/biometric/src/main/res/values-te/strings.xml
similarity index 100%
rename from biometric/res/values-te/strings.xml
rename to biometric/src/main/res/values-te/strings.xml
diff --git a/biometric/res/values-th/strings.xml b/biometric/src/main/res/values-th/strings.xml
similarity index 100%
rename from biometric/res/values-th/strings.xml
rename to biometric/src/main/res/values-th/strings.xml
diff --git a/biometric/res/values-tl/strings.xml b/biometric/src/main/res/values-tl/strings.xml
similarity index 100%
rename from biometric/res/values-tl/strings.xml
rename to biometric/src/main/res/values-tl/strings.xml
diff --git a/biometric/res/values-tr/strings.xml b/biometric/src/main/res/values-tr/strings.xml
similarity index 100%
rename from biometric/res/values-tr/strings.xml
rename to biometric/src/main/res/values-tr/strings.xml
diff --git a/biometric/res/values-uk/strings.xml b/biometric/src/main/res/values-uk/strings.xml
similarity index 100%
rename from biometric/res/values-uk/strings.xml
rename to biometric/src/main/res/values-uk/strings.xml
diff --git a/biometric/res/values-ur/strings.xml b/biometric/src/main/res/values-ur/strings.xml
similarity index 100%
rename from biometric/res/values-ur/strings.xml
rename to biometric/src/main/res/values-ur/strings.xml
diff --git a/biometric/res/values-uz/strings.xml b/biometric/src/main/res/values-uz/strings.xml
similarity index 100%
rename from biometric/res/values-uz/strings.xml
rename to biometric/src/main/res/values-uz/strings.xml
diff --git a/biometric/res/values-vi/strings.xml b/biometric/src/main/res/values-vi/strings.xml
similarity index 100%
rename from biometric/res/values-vi/strings.xml
rename to biometric/src/main/res/values-vi/strings.xml
diff --git a/biometric/res/values-zh-rCN/strings.xml b/biometric/src/main/res/values-zh-rCN/strings.xml
similarity index 100%
rename from biometric/res/values-zh-rCN/strings.xml
rename to biometric/src/main/res/values-zh-rCN/strings.xml
diff --git a/biometric/res/values-zh-rHK/strings.xml b/biometric/src/main/res/values-zh-rHK/strings.xml
similarity index 100%
rename from biometric/res/values-zh-rHK/strings.xml
rename to biometric/src/main/res/values-zh-rHK/strings.xml
diff --git a/biometric/res/values-zh-rTW/strings.xml b/biometric/src/main/res/values-zh-rTW/strings.xml
similarity index 100%
rename from biometric/res/values-zh-rTW/strings.xml
rename to biometric/src/main/res/values-zh-rTW/strings.xml
diff --git a/biometric/res/values-zu/strings.xml b/biometric/src/main/res/values-zu/strings.xml
similarity index 100%
rename from biometric/res/values-zu/strings.xml
rename to biometric/src/main/res/values-zu/strings.xml
diff --git a/biometric/res/values/colors.xml b/biometric/src/main/res/values/colors.xml
similarity index 100%
rename from biometric/res/values/colors.xml
rename to biometric/src/main/res/values/colors.xml
diff --git a/biometric/res/values/devices.xml b/biometric/src/main/res/values/devices.xml
similarity index 100%
rename from biometric/res/values/devices.xml
rename to biometric/src/main/res/values/devices.xml
diff --git a/biometric/res/values/dimens.xml b/biometric/src/main/res/values/dimens.xml
similarity index 100%
rename from biometric/res/values/dimens.xml
rename to biometric/src/main/res/values/dimens.xml
diff --git a/biometric/res/values/strings.xml b/biometric/src/main/res/values/strings.xml
similarity index 100%
rename from biometric/res/values/strings.xml
rename to biometric/src/main/res/values/strings.xml
diff --git a/biometric/res/values/styles.xml b/biometric/src/main/res/values/styles.xml
similarity index 100%
rename from biometric/res/values/styles.xml
rename to biometric/src/main/res/values/styles.xml
diff --git a/buildSrc/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt b/buildSrc/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
index ea3728d..0d377c0 100644
--- a/buildSrc/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/metalava/MetalavaRunner.kt
@@ -113,7 +113,6 @@
         "BuilderSetStyle",
         "ExecutorRegistration",
         "NotCloseable",
-        "UserHandleName",
         "UseIcu",
         "NoByteOrShort",
         "CommonArgsFirst",
@@ -122,7 +121,8 @@
 
         // We should only treat these as warnings
         "IntentBuilderName",
-        "OnNameExpected"
+        "OnNameExpected",
+        "UserHandleName"
     ).joinToString(),
     "--error",
     listOf(
diff --git a/camera/camera-camera2/api/1.0.0-alpha08.txt b/camera/camera-camera2/api/1.0.0-alpha08.txt
new file mode 100644
index 0000000..e869ab7
--- /dev/null
+++ b/camera/camera-camera2/api/1.0.0-alpha08.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/current.txt b/camera/camera-camera2/api/current.txt
new file mode 100644
index 0000000..e869ab7
--- /dev/null
+++ b/camera/camera-camera2/api/current.txt
@@ -0,0 +1,9 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/public_plus_experimental_1.0.0-alpha08.txt b/camera/camera-camera2/api/public_plus_experimental_1.0.0-alpha08.txt
new file mode 100644
index 0000000..1ab5e18
--- /dev/null
+++ b/camera/camera-camera2/api/public_plus_experimental_1.0.0-alpha08.txt
@@ -0,0 +1,31 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
+package androidx.camera.camera2.interop {
+
+  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+    method public static String extractCameraId(androidx.camera.core.CameraInfo);
+  }
+
+  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+  }
+
+  public static final class Camera2Interop.Extender<T> {
+    ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+    method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+  }
+
+  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/public_plus_experimental_current.txt b/camera/camera-camera2/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..1ab5e18
--- /dev/null
+++ b/camera/camera-camera2/api/public_plus_experimental_current.txt
@@ -0,0 +1,31 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
+package androidx.camera.camera2.interop {
+
+  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2CameraInfo {
+    method public static String extractCameraId(androidx.camera.core.CameraInfo);
+  }
+
+  @androidx.camera.camera2.interop.ExperimentalCamera2Interop public final class Camera2Interop {
+  }
+
+  public static final class Camera2Interop.Extender<T> {
+    ctor public Camera2Interop.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+    method public <ValueT> androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback);
+    method public androidx.camera.camera2.interop.Camera2Interop.Extender<T!> setSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+  }
+
+  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalCamera2Interop {
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/res-1.0.0-alpha08.txt b/camera/camera-camera2/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-camera2/api/res-1.0.0-alpha08.txt
diff --git a/camera/camera-camera2/api/restricted_1.0.0-alpha08.txt b/camera/camera-camera2/api/restricted_1.0.0-alpha08.txt
new file mode 100644
index 0000000..5cec162
--- /dev/null
+++ b/camera/camera-camera2/api/restricted_1.0.0-alpha08.txt
@@ -0,0 +1,94 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) androidx.camera.camera2.impl {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CamcorderProfileHelper {
+    method public boolean hasProfile(int, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CameraCaptureResultConverter {
+    method public static android.hardware.camera2.CaptureResult! getCaptureResult(androidx.camera.core.CameraCaptureResult!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CameraControl implements androidx.camera.core.CameraControlInternal {
+    ctor public Camera2CameraControl(android.hardware.camera2.CameraCharacteristics, java.util.concurrent.ScheduledExecutorService, java.util.concurrent.Executor, androidx.camera.core.CameraControlInternal.ControlUpdateCallback);
+    method public void cancelAfAeTrigger(boolean, boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public int getFlashMode();
+    method public androidx.camera.camera2.impl.TorchControl getTorchControl();
+    method public androidx.camera.camera2.impl.ZoomControl getZoomControl();
+    method public void setCropRegion(android.graphics.Rect?);
+    method public void setFlashMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(float);
+    method @WorkerThread public void setPreviewAspectRatio(android.util.Rational?);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+    method public void submitCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void triggerAePrecapture();
+    method public void triggerAf();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CaptureCallbacks {
+    method public static android.hardware.camera2.CameraCaptureSession.CaptureCallback createComboCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback!...);
+    method public static android.hardware.camera2.CameraCaptureSession.CaptureCallback createNoOpCallback();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2ImplConfig implements androidx.camera.core.Config {
+    ctor public Camera2ImplConfig(androidx.camera.core.Config);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.camera2.impl.CameraEventCallbacks? getCameraEventCallback(androidx.camera.camera2.impl.CameraEventCallbacks?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getCaptureRequestTemplate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraDevice.StateCallback? getDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraCaptureSession.CaptureCallback? getSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraCaptureSession.StateCallback? getSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Camera2ImplConfig.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.impl.Camera2ImplConfig> {
+    ctor public Camera2ImplConfig.Builder();
+    method public androidx.camera.camera2.impl.Camera2ImplConfig build();
+    method public androidx.camera.core.MutableConfig getMutableConfig();
+    method public androidx.camera.camera2.impl.Camera2ImplConfig.Builder insertAllOptions(androidx.camera.core.Config);
+    method public <ValueT> androidx.camera.camera2.impl.Camera2ImplConfig.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Camera2ImplConfig.Extender<T> {
+    ctor public Camera2ImplConfig.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.camera2.impl.Camera2ImplConfig.Extender<T!> setCameraEventCallback(androidx.camera.camera2.impl.CameraEventCallbacks);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2LensFacingCameraIdFilter extends androidx.camera.core.LensFacingCameraIdFilter {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class CameraBurstCaptureCallback extends android.hardware.camera2.CameraCaptureSession.CaptureCallback {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class CameraEventCallback {
+    ctor public CameraEventCallback();
+    method public androidx.camera.core.CaptureConfig! onDisableSession();
+    method public androidx.camera.core.CaptureConfig! onEnableSession();
+    method public androidx.camera.core.CaptureConfig! onPresetSession();
+    method public androidx.camera.core.CaptureConfig! onRepeating();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraEventCallbacks extends androidx.camera.core.MultiValueSet<androidx.camera.camera2.impl.CameraEventCallback> {
+    ctor public CameraEventCallbacks(androidx.camera.camera2.impl.CameraEventCallback!...);
+    method public androidx.camera.core.MultiValueSet<androidx.camera.camera2.impl.CameraEventCallback!> clone();
+    method public androidx.camera.camera2.impl.CameraEventCallbacks.ComboCameraEventCallback createComboCallback();
+    method public static androidx.camera.camera2.impl.CameraEventCallbacks createEmptyCallback();
+  }
+
+}
+
diff --git a/camera/camera-camera2/api/restricted_current.txt b/camera/camera-camera2/api/restricted_current.txt
new file mode 100644
index 0000000..5cec162
--- /dev/null
+++ b/camera/camera-camera2/api/restricted_current.txt
@@ -0,0 +1,94 @@
+// Signature format: 3.0
+package androidx.camera.camera2 {
+
+  public final class Camera2Config {
+    method public static androidx.camera.core.CameraXConfig defaultConfig(android.content.Context);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY) androidx.camera.camera2.impl {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CamcorderProfileHelper {
+    method public boolean hasProfile(int, int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CameraCaptureResultConverter {
+    method public static android.hardware.camera2.CaptureResult! getCaptureResult(androidx.camera.core.CameraCaptureResult!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CameraControl implements androidx.camera.core.CameraControlInternal {
+    ctor public Camera2CameraControl(android.hardware.camera2.CameraCharacteristics, java.util.concurrent.ScheduledExecutorService, java.util.concurrent.Executor, androidx.camera.core.CameraControlInternal.ControlUpdateCallback);
+    method public void cancelAfAeTrigger(boolean, boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public int getFlashMode();
+    method public androidx.camera.camera2.impl.TorchControl getTorchControl();
+    method public androidx.camera.camera2.impl.ZoomControl getZoomControl();
+    method public void setCropRegion(android.graphics.Rect?);
+    method public void setFlashMode(int);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(float);
+    method @WorkerThread public void setPreviewAspectRatio(android.util.Rational?);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+    method public void submitCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void triggerAePrecapture();
+    method public void triggerAf();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2CaptureCallbacks {
+    method public static android.hardware.camera2.CameraCaptureSession.CaptureCallback createComboCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback!...);
+    method public static android.hardware.camera2.CameraCaptureSession.CaptureCallback createNoOpCallback();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2ImplConfig implements androidx.camera.core.Config {
+    ctor public Camera2ImplConfig(androidx.camera.core.Config);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.camera2.impl.CameraEventCallbacks? getCameraEventCallback(androidx.camera.camera2.impl.CameraEventCallbacks?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? getCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getCaptureRequestTemplate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraDevice.StateCallback? getDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraCaptureSession.CaptureCallback? getSessionCaptureCallback(android.hardware.camera2.CameraCaptureSession.CaptureCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.hardware.camera2.CameraCaptureSession.StateCallback? getSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Camera2ImplConfig.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.camera2.impl.Camera2ImplConfig> {
+    ctor public Camera2ImplConfig.Builder();
+    method public androidx.camera.camera2.impl.Camera2ImplConfig build();
+    method public androidx.camera.core.MutableConfig getMutableConfig();
+    method public androidx.camera.camera2.impl.Camera2ImplConfig.Builder insertAllOptions(androidx.camera.core.Config);
+    method public <ValueT> androidx.camera.camera2.impl.Camera2ImplConfig.Builder setCaptureRequestOption(android.hardware.camera2.CaptureRequest.Key<ValueT!>, ValueT);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Camera2ImplConfig.Extender<T> {
+    ctor public Camera2ImplConfig.Extender(androidx.camera.core.ExtendableBuilder<T!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.camera2.impl.Camera2ImplConfig.Extender<T!> setCameraEventCallback(androidx.camera.camera2.impl.CameraEventCallbacks);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Camera2LensFacingCameraIdFilter extends androidx.camera.core.LensFacingCameraIdFilter {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class CameraBurstCaptureCallback extends android.hardware.camera2.CameraCaptureSession.CaptureCallback {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class CameraEventCallback {
+    ctor public CameraEventCallback();
+    method public androidx.camera.core.CaptureConfig! onDisableSession();
+    method public androidx.camera.core.CaptureConfig! onEnableSession();
+    method public androidx.camera.core.CaptureConfig! onPresetSession();
+    method public androidx.camera.core.CaptureConfig! onRepeating();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraEventCallbacks extends androidx.camera.core.MultiValueSet<androidx.camera.camera2.impl.CameraEventCallback> {
+    ctor public CameraEventCallbacks(androidx.camera.camera2.impl.CameraEventCallback!...);
+    method public androidx.camera.core.MultiValueSet<androidx.camera.camera2.impl.CameraEventCallback!> clone();
+    method public androidx.camera.camera2.impl.CameraEventCallbacks.ComboCameraEventCallback createComboCallback();
+    method public static androidx.camera.camera2.impl.CameraEventCallbacks createEmptyCallback();
+  }
+
+}
+
diff --git a/camera/camera-core/api/1.0.0-alpha08.txt b/camera/camera-core/api/1.0.0-alpha08.txt
new file mode 100644
index 0000000..72a74c6
--- /dev/null
+++ b/camera/camera-core/api/1.0.0-alpha08.txt
@@ -0,0 +1,242 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  public final class CameraSelector {
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  public final class CameraXConfig {
+  }
+
+  public static final class CameraXConfig.Builder {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageAnalysis> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getFlashMode();
+    method public void setFlashMode(int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageCapture> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+  }
+
+  public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  public abstract class UseCase {
+  }
+
+}
+
diff --git a/camera/camera-core/api/current.txt b/camera/camera-core/api/current.txt
new file mode 100644
index 0000000..72a74c6
--- /dev/null
+++ b/camera/camera-core/api/current.txt
@@ -0,0 +1,242 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  public final class CameraSelector {
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  public final class CameraXConfig {
+  }
+
+  public static final class CameraXConfig.Builder {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageAnalysis> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getFlashMode();
+    method public void setFlashMode(int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageCapture> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+  }
+
+  public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  public abstract class UseCase {
+  }
+
+}
+
diff --git a/camera/camera-core/api/public_plus_experimental_1.0.0-alpha08.txt b/camera/camera-core/api/public_plus_experimental_1.0.0-alpha08.txt
new file mode 100644
index 0000000..01f5953
--- /dev/null
+++ b/camera/camera-core/api/public_plus_experimental_1.0.0-alpha08.txt
@@ -0,0 +1,246 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  public final class CameraSelector {
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  public final class CameraXConfig {
+  }
+
+  public static final class CameraXConfig.Builder {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+  }
+
+  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageAnalysis> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getFlashMode();
+    method public void setFlashMode(int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageCapture> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+  }
+
+  public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  public abstract class UseCase {
+  }
+
+}
+
diff --git a/camera/camera-core/api/public_plus_experimental_current.txt b/camera/camera-core/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..01f5953
--- /dev/null
+++ b/camera/camera-core/api/public_plus_experimental_current.txt
@@ -0,0 +1,246 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+  }
+
+  public final class CameraSelector {
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method public androidx.camera.core.CameraSelector build();
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(int);
+  }
+
+  public final class CameraXConfig {
+  }
+
+  public static final class CameraXConfig.Builder {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+  }
+
+  @experimental.Experimental @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.CLASS) public @interface ExperimentalGetImage {
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  public final class FocusMeteringResult {
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method public void clearAnalyzer();
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(int);
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageAnalysis> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(int);
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method public int getFlashMode();
+    method public void setFlashMode(int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.ImageCapture> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(int);
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method public long getTimestamp();
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method @androidx.camera.core.ExperimentalGetImage public android.media.Image? getImage();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+  }
+
+  public abstract class MeteringPointFactory {
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.ExtendableBuilder<androidx.camera.core.Preview> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(int);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(int);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  public abstract class UseCase {
+  }
+
+}
+
diff --git a/camera/camera-core/api/res-1.0.0-alpha08.txt b/camera/camera-core/api/res-1.0.0-alpha08.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-core/api/res-1.0.0-alpha08.txt
diff --git a/camera/camera-core/api/restricted_1.0.0-alpha08.txt b/camera/camera-core/api/restricted_1.0.0-alpha08.txt
new file mode 100644
index 0000000..5c7ebeb
--- /dev/null
+++ b/camera/camera-core/api/restricted_1.0.0-alpha08.txt
@@ -0,0 +1,1460 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  @IntDef({androidx.camera.core.AspectRatio.RATIO_4_3, androidx.camera.core.AspectRatio.RATIO_16_9}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AspectRatio.Ratio {
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class CameraCaptureCallback {
+    ctor public CameraCaptureCallback();
+    method public void onCaptureCancelled();
+    method public void onCaptureCompleted(androidx.camera.core.CameraCaptureResult);
+    method public void onCaptureFailed(androidx.camera.core.CameraCaptureFailure);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureCallbacks {
+    method public static androidx.camera.core.CameraCaptureCallback! createComboCallback(androidx.camera.core.CameraCaptureCallback!...);
+    method public static androidx.camera.core.CameraCaptureCallback! createNoOpCallback();
+  }
+
+  public static final class CameraCaptureCallbacks.ComboCameraCaptureCallback extends androidx.camera.core.CameraCaptureCallback {
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getCallbacks();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureFailure {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraCaptureFailure(androidx.camera.core.CameraCaptureFailure.Reason!);
+    method public androidx.camera.core.CameraCaptureFailure.Reason! getReason();
+  }
+
+  public enum CameraCaptureFailure.Reason {
+    enum_constant public static final androidx.camera.core.CameraCaptureFailure.Reason ERROR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureMetaData {
+  }
+
+  public enum CameraCaptureMetaData.AeState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState CONVERGED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState FLASH_REQUIRED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState LOCKED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState SEARCHING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AfMode {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode OFF;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode ON_CONTINUOUS_AUTO;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode ON_MANUAL_AUTO;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AfState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState LOCKED_FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState LOCKED_NOT_FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState SCANNING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AwbState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState CONVERGED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState LOCKED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState METERING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.FlashState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState FIRED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState NONE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState READY;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState UNKNOWN;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraCaptureResult {
+    method public androidx.camera.core.CameraCaptureMetaData.AeState getAeState();
+    method public androidx.camera.core.CameraCaptureMetaData.AfMode getAfMode();
+    method public androidx.camera.core.CameraCaptureMetaData.AfState getAfState();
+    method public androidx.camera.core.CameraCaptureMetaData.AwbState getAwbState();
+    method public androidx.camera.core.CameraCaptureMetaData.FlashState getFlashState();
+    method public Object! getTag();
+    method public long getTimestamp();
+  }
+
+  public static final class CameraCaptureResult.EmptyCameraCaptureResult implements androidx.camera.core.CameraCaptureResult {
+    ctor public CameraCaptureResult.EmptyCameraCaptureResult();
+    method public static androidx.camera.core.CameraCaptureResult! create();
+    method public androidx.camera.core.CameraCaptureMetaData.AeState getAeState();
+    method public androidx.camera.core.CameraCaptureMetaData.AfMode getAfMode();
+    method public androidx.camera.core.CameraCaptureMetaData.AfState getAfState();
+    method public androidx.camera.core.CameraCaptureMetaData.AwbState getAwbState();
+    method public androidx.camera.core.CameraCaptureMetaData.FlashState getFlashState();
+    method public Object! getTag();
+    method public long getTimestamp();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureResults {
+    method public static androidx.camera.core.CameraCaptureResult! retrieveCameraCaptureResult(androidx.camera.core.ImageInfo!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureSessionStateCallbacks {
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createComboCallback(java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!>!);
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createComboCallback(android.hardware.camera2.CameraCaptureSession.StateCallback!...);
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createNoOpCallback();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraControl.OperationCanceledException(String);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraControl.OperationCanceledException(String, Throwable);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraControlInternal extends androidx.camera.core.CameraControl {
+    method public void cancelAfAeTrigger(boolean, boolean);
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method public void setCropRegion(android.graphics.Rect?);
+    method public void setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public void submitCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void triggerAePrecapture();
+    method public void triggerAf();
+    field public static final androidx.camera.core.CameraControlInternal! DEFAULT_EMPTY_INSTANCE;
+  }
+
+  public static interface CameraControlInternal.ControlUpdateCallback {
+    method public void onCameraControlCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void onCameraControlUpdateSessionConfig(androidx.camera.core.SessionConfig);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraDeviceConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CameraIdFilter!>! OPTION_CAMERA_ID_FILTER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_LENS_FACING;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface CameraDeviceConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraDeviceStateCallbacks {
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createComboCallback(java.util.List<android.hardware.camera2.CameraDevice.StateCallback!>!);
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createComboCallback(android.hardware.camera2.CameraDevice.StateCallback!...);
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createNoOpCallback();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraDeviceSurfaceManager {
+    method public boolean checkSupported(String!, java.util.List<androidx.camera.core.SurfaceConfig!>!);
+    method public android.util.Rational? getCorrectedAspectRatio(String, @androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public android.util.Size? getMaxOutputSize(String!, int);
+    method public android.util.Size! getPreviewSize();
+    method public java.util.Map<androidx.camera.core.UseCase!,android.util.Size!>! getSuggestedResolutions(String!, java.util.List<androidx.camera.core.UseCase!>!, java.util.List<androidx.camera.core.UseCase!>!);
+    method public void init();
+    method public boolean isInitialized();
+    method public boolean requiresCorrectedAspectRatio(String);
+    method public androidx.camera.core.SurfaceConfig! transformSurfaceConfig(String!, int, android.util.Size!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraFactory {
+    method public String? cameraIdForLensFacing(@androidx.camera.core.CameraSelector.LensFacing int) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public java.util.Set<java.lang.String!> getAvailableCameraIds() throws androidx.camera.core.CameraInfoUnavailableException;
+    method public androidx.camera.core.CameraInternal getCamera(String) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public androidx.camera.core.LensFacingCameraIdFilter getLensFacingCameraIdFilter(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraIdFilter {
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraIdFilterSet implements androidx.camera.core.CameraIdFilter {
+    ctor public CameraIdFilterSet();
+    method public void addCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+    method public java.util.Set<androidx.camera.core.CameraIdFilter!> getCameraIdFilters();
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraInfoInternal extends androidx.camera.core.CameraInfo {
+    method public String getCameraId();
+    method public Integer? getLensFacing();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraInfoUnavailableException(String!, Throwable!);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraInfoUnavailableException(String!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraInternal extends androidx.camera.core.Camera androidx.camera.core.UseCase.StateChangeCallback {
+    method public void addOnlineUseCase(java.util.Collection<androidx.camera.core.UseCase!>);
+    method public void close();
+    method public androidx.camera.core.CameraControlInternal getCameraControlInternal();
+    method public androidx.camera.core.CameraInfoInternal getCameraInfoInternal();
+    method public androidx.camera.core.Observable<androidx.camera.core.CameraInternal.State!> getCameraState();
+    method public void open();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> release();
+    method public void removeOnlineUseCase(java.util.Collection<androidx.camera.core.UseCase!>);
+  }
+
+  public enum CameraInternal.State {
+    enum_constant public static final androidx.camera.core.CameraInternal.State CLOSED;
+    enum_constant public static final androidx.camera.core.CameraInternal.State CLOSING;
+    enum_constant public static final androidx.camera.core.CameraInternal.State OPEN;
+    enum_constant public static final androidx.camera.core.CameraInternal.State OPENING;
+    enum_constant public static final androidx.camera.core.CameraInternal.State PENDING_OPEN;
+    enum_constant public static final androidx.camera.core.CameraInternal.State RELEASED;
+    enum_constant public static final androidx.camera.core.CameraInternal.State RELEASING;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraOrientationUtil {
+    method public static int getRelativeImageRotation(int, int, boolean);
+    method public static int surfaceRotationToDegrees(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraRepository {
+    ctor public CameraRepository();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> deinit();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraInternal! getCamera(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void init(androidx.camera.core.CameraFactory!);
+    method public void onGroupActive(androidx.camera.core.UseCaseGroup!);
+    method public void onGroupInactive(androidx.camera.core.UseCaseGroup!);
+  }
+
+  public final class CameraSelector {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.LinkedHashSet<androidx.camera.core.CameraIdFilter!> getCameraFilterSet();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String select(java.util.Set<java.lang.String!>);
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraSelector.Builder appendFilter(androidx.camera.core.CameraIdFilter);
+    method public androidx.camera.core.CameraSelector build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraSelector.Builder fromSelector(androidx.camera.core.CameraSelector);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @IntDef({androidx.camera.core.CameraSelector.LENS_FACING_FRONT, androidx.camera.core.CameraSelector.LENS_FACING_BACK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CameraSelector.LensFacing {
+  }
+
+  @MainThread @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraX {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static java.util.Collection<androidx.camera.core.UseCase!>? getActiveUseCases();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraFactory getCameraFactory();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraInfoInternal getCameraInfo(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static String? getCameraWithCameraSelector(androidx.camera.core.CameraSelector);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static String? getCameraWithLensFacing(@androidx.camera.core.CameraSelector.LensFacing int) throws androidx.camera.core.CameraInfoUnavailableException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static android.content.Context getContext();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public static int getDefaultLensFacing() throws androidx.camera.core.CameraInfoUnavailableException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static <C extends androidx.camera.core.UseCaseConfig<?>> C? getDefaultUseCaseConfig(Class<C!>!, Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.CameraX!> getOrCreateInstance(android.content.Context);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraDeviceSurfaceManager getSurfaceManager();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> initialize(android.content.Context, androidx.camera.core.CameraXConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean isBound(androidx.camera.core.UseCase);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean isInitialized();
+    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> shutdown();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void unbind(androidx.camera.core.UseCase!...);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void unbindAll();
+  }
+
+  public final class CameraXConfig implements androidx.camera.core.Config androidx.camera.core.TargetConfig<androidx.camera.core.CameraX> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraFactory? getCameraFactory(androidx.camera.core.CameraFactory?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraDeviceSurfaceManager? getDeviceSurfaceManager(androidx.camera.core.CameraDeviceSurfaceManager?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.CameraX!>? getTargetClass(Class<androidx.camera.core.CameraX!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.CameraX!> getTargetClass();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String? getTargetName(String?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String getTargetName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCaseConfigFactory? getUseCaseConfigRepository(androidx.camera.core.UseCaseConfigFactory?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+  }
+
+  public static final class CameraXConfig.Builder implements androidx.camera.core.TargetConfig.Builder<androidx.camera.core.CameraX,androidx.camera.core.CameraXConfig.Builder> {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setCameraFactory(androidx.camera.core.CameraFactory);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setDeviceSurfaceManager(androidx.camera.core.CameraDeviceSurfaceManager);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setTargetClass(Class<androidx.camera.core.CameraX!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setTargetName(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setUseCaseConfigFactory(androidx.camera.core.UseCaseConfigFactory);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraXThreads {
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final String TAG = "CameraX-";
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureBundle {
+    method public java.util.List<androidx.camera.core.CaptureStage!>! getCaptureStages();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CaptureConfig {
+    method public static androidx.camera.core.CaptureConfig! defaultEmptyCaptureConfig();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!>! getCameraCaptureCallbacks();
+    method public androidx.camera.core.Config! getImplementationOptions();
+    method public java.util.List<androidx.camera.core.DeferrableSurface!>! getSurfaces();
+    method public Object! getTag();
+    method public int getTemplateType();
+    method public boolean isUseRepeatingSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class CaptureConfig.Builder {
+    ctor public CaptureConfig.Builder();
+    method public void addAllCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>!);
+    method public void addCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback!);
+    method public void addImplementationOptions(androidx.camera.core.Config!);
+    method public void addSurface(androidx.camera.core.DeferrableSurface!);
+    method public androidx.camera.core.CaptureConfig! build();
+    method public void clearSurfaces();
+    method public static androidx.camera.core.CaptureConfig.Builder! createFrom(androidx.camera.core.UseCaseConfig<?>!);
+    method public static androidx.camera.core.CaptureConfig.Builder! from(androidx.camera.core.CaptureConfig!);
+    method public androidx.camera.core.Config! getImplementationOptions();
+    method public java.util.Set<androidx.camera.core.DeferrableSurface!> getSurfaces();
+    method public void removeSurface(androidx.camera.core.DeferrableSurface!);
+    method public void setImplementationOptions(androidx.camera.core.Config!);
+    method public void setTag(Object!);
+    method public void setTemplateType(int);
+    method public void setUseRepeatingSurface(boolean);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface CaptureConfig.OptionUnpacker {
+    method public void unpack(androidx.camera.core.UseCaseConfig<?>!, androidx.camera.core.CaptureConfig.Builder!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureProcessor {
+    method public void onOutputSurface(android.view.Surface!, int);
+    method public void onResolutionUpdate(android.util.Size!);
+    method public void process(androidx.camera.core.ImageProxyBundle!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureStage {
+    method public androidx.camera.core.CaptureConfig! getCaptureConfig();
+    method public int getId();
+  }
+
+  public static final class CaptureStage.DefaultCaptureStage implements androidx.camera.core.CaptureStage {
+    method public androidx.camera.core.CaptureConfig! getCaptureConfig();
+    method public int getId();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface Config {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String!, androidx.camera.core.Config.OptionMatcher!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!>! listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT! retrieveOption(androidx.camera.core.Config.Option<ValueT!>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract static class Config.Option<T> {
+    method public static <T> androidx.camera.core.Config.Option<T!>! create(String!, Class<?>!);
+    method public static <T> androidx.camera.core.Config.Option<T!>! create(String!, Class<?>!, Object?);
+    method public abstract String! getId();
+    method public abstract Object? getToken();
+    method public abstract Class<T!>! getValueClass();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface Config.OptionMatcher {
+    method public boolean onOptionMatched(androidx.camera.core.Config.Option<?>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ConfigProvider<C extends androidx.camera.core.Config> {
+    method public C! getConfig(Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class DeferrableSurface {
+    ctor public DeferrableSurface();
+    method public final void close();
+    method public final com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> getSurface();
+    method public void notifySurfaceAttached();
+    method public void notifySurfaceDetached();
+    method public void setOnSurfaceDetachedListener(java.util.concurrent.Executor, androidx.camera.core.DeferrableSurface.OnSurfaceDetachedListener);
+    field protected static final String TAG = "DeferrableSurface";
+  }
+
+  public static interface DeferrableSurface.OnSurfaceDetachedListener {
+    method public void onSurfaceDetached();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class DeferrableSurface.SurfaceClosedException extends java.lang.Exception {
+    ctor public DeferrableSurface.SurfaceClosedException(String, Throwable, androidx.camera.core.DeferrableSurface);
+    ctor public DeferrableSurface.SurfaceClosedException(String, androidx.camera.core.DeferrableSurface);
+    method public androidx.camera.core.DeferrableSurface getDeferrableSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class DeferrableSurfaces {
+    method public static com.google.common.util.concurrent.ListenableFuture<java.util.List<android.view.Surface!>!> surfaceListWithTimeout(java.util.Collection<androidx.camera.core.DeferrableSurface!>, boolean, long, java.util.concurrent.Executor, java.util.concurrent.ScheduledExecutorService);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class DeviceProperties {
+    ctor public DeviceProperties();
+    method public static androidx.camera.core.DeviceProperties! create();
+    method public static androidx.camera.core.DeviceProperties! create(String!, String!, int);
+    method public abstract String! manufacturer();
+    method public abstract String! model();
+    method public abstract int sdkVersion();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected android.graphics.PointF convertPoint(float, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Exif {
+    method public void attachLocation(android.location.Location!);
+    method public void attachTimestamp();
+    method public static androidx.camera.core.Exif! createFromFile(java.io.File!) throws java.io.IOException;
+    method public static androidx.camera.core.Exif! createFromFileString(String!) throws java.io.IOException;
+    method public static androidx.camera.core.Exif! createFromInputStream(java.io.InputStream!) throws java.io.IOException;
+    method public void flipHorizontally();
+    method public void flipVertically();
+    method public String? getDescription();
+    method public int getHeight();
+    method public long getLastModifiedTimestamp();
+    method public android.location.Location? getLocation();
+    method public int getRotation();
+    method public long getTimestamp();
+    method public int getWidth();
+    method public boolean isFlippedHorizontally();
+    method public boolean isFlippedVertically();
+    method public void removeLocation();
+    method public void removeTimestamp();
+    method public void rotate(int);
+    method public void save() throws java.io.IOException;
+    method public void setDescription(String?);
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ExtendableUseCaseConfigFactory implements androidx.camera.core.UseCaseConfigFactory {
+    ctor public ExtendableUseCaseConfigFactory();
+    method public <C extends androidx.camera.core.UseCaseConfig<?>> C? getConfig(Class<C!>!, Integer?);
+    method public <C extends androidx.camera.core.Config> void installDefaultProvider(Class<C!>!, androidx.camera.core.ConfigProvider<C!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class FlashModeHelper {
+    method public static String nameOf(@androidx.camera.core.ImageCapture.FlashMode int);
+    method @androidx.camera.core.ImageCapture.FlashMode public static int valueOf(String?);
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, @androidx.camera.core.FocusMeteringAction.MeteringMode int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, @androidx.camera.core.FocusMeteringAction.MeteringMode int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  @IntDef(flag=true, value={androidx.camera.core.FocusMeteringAction.FLAG_AF, androidx.camera.core.FocusMeteringAction.FLAG_AE, androidx.camera.core.FocusMeteringAction.FLAG_AWB}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FocusMeteringAction.MeteringMode {
+  }
+
+  public final class FocusMeteringResult {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.FocusMeteringResult create(boolean);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.FocusMeteringResult emptyInstance();
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method public void clearAnalyzer();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.ImageAnalysis.Defaults! DEFAULT_CONFIG;
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  @IntDef({androidx.camera.core.ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST, androidx.camera.core.ImageAnalysis.STRATEGY_BLOCK_PRODUCER}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageAnalysis.BackpressureStrategy {
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.ImageAnalysis.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.ImageAnalysis.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.ImageAnalysis,androidx.camera.core.ImageAnalysisConfig,androidx.camera.core.ImageAnalysis.Builder> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.ImageAnalysis.Builder fromConfig(androidx.camera.core.ImageAnalysisConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysisConfig getUseCaseConfig();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(@androidx.camera.core.ImageAnalysis.BackpressureStrategy int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setTargetClass(Class<androidx.camera.core.ImageAnalysis!>);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class ImageAnalysis.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.ImageAnalysisConfig> {
+    ctor public ImageAnalysis.Defaults();
+    method public androidx.camera.core.ImageAnalysisConfig getConfig(Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageAnalysisConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.ImageAnalysis> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method @androidx.camera.core.ImageAnalysis.BackpressureStrategy public int getBackpressureStrategy(@androidx.camera.core.ImageAnalysis.BackpressureStrategy int);
+    method @androidx.camera.core.ImageAnalysis.BackpressureStrategy public int getBackpressureStrategy();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method public int getImageQueueDepth(int);
+    method public int getImageQueueDepth();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageAnalysis!>? getTargetClass(Class<androidx.camera.core.ImageAnalysis!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageAnalysis!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.ImageCapture.Defaults! DEFAULT_CONFIG;
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.ImageCapture.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.ImageCapture.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.ImageCapture,androidx.camera.core.ImageCaptureConfig,androidx.camera.core.ImageCapture.Builder> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.ImageCapture.Builder fromConfig(androidx.camera.core.ImageCaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCaptureConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setBufferFormat(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureBundle(androidx.camera.core.CaptureBundle);
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(@androidx.camera.core.ImageCapture.CaptureMode int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureProcessor(androidx.camera.core.CaptureProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setMaxCaptureStages(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setTargetClass(Class<androidx.camera.core.ImageCapture!>);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY, androidx.camera.core.ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.CaptureMode {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class ImageCapture.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.ImageCaptureConfig> {
+    ctor public ImageCapture.Defaults();
+    method public androidx.camera.core.ImageCaptureConfig! getConfig(Integer?);
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.FLASH_MODE_AUTO, androidx.camera.core.ImageCapture.FLASH_MODE_ON, androidx.camera.core.ImageCapture.FLASH_MODE_OFF}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.FlashMode {
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.ERROR_UNKNOWN, androidx.camera.core.ImageCapture.ERROR_FILE_IO, androidx.camera.core.ImageCapture.ERROR_CAPTURE_FAILED, androidx.camera.core.ImageCapture.ERROR_CAMERA_CLOSED, androidx.camera.core.ImageCapture.ERROR_INVALID_CAMERA}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.ImageCaptureError {
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(@androidx.camera.core.ImageCapture.ImageCaptureError int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(@androidx.camera.core.ImageCapture.ImageCaptureError int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageCaptureConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.ImageCapture> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getBufferFormat(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer getBufferFormat();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureBundle? getCaptureBundle(androidx.camera.core.CaptureBundle?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureBundle getCaptureBundle();
+    method @androidx.camera.core.ImageCapture.CaptureMode public int getCaptureMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor? getCaptureProcessor(androidx.camera.core.CaptureProcessor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor getCaptureProcessor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method public java.util.concurrent.Executor? getIoExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getIoExecutor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getMaxCaptureStages(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getMaxCaptureStages();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageCapture!>? getTargetClass(Class<androidx.camera.core.ImageCapture!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageCapture!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasCaptureMode();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_IO_EXECUTOR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageFormatConstants {
+    field public static final int INTERNAL_DEFINED_IMAGE_FORMAT_JPEG = 33; // 0x21
+    field public static final int INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE = 34; // 0x22
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Object? getTag();
+    method public long getTimestamp();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageInfoProcessor {
+    method public androidx.camera.core.CaptureStage! getCaptureStage();
+    method public boolean process(androidx.camera.core.ImageInfo!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageOutputConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getTargetResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method public boolean hasTargetAspectRatio();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final int INVALID_ROTATION = -1; // 0xffffffff
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_DEFAULT_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_MAX_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>!>! OPTION_SUPPORTED_RESOLUTIONS;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_TARGET_ASPECT_RATIO;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Rational!>! OPTION_TARGET_ASPECT_RATIO_CUSTOM;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_TARGET_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_TARGET_ROTATION;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface ImageOutputConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method public B setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetResolution(android.util.Size);
+    method public B setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+  }
+
+  @IntDef({android.view.Surface.ROTATION_0, android.view.Surface.ROTATION_90, android.view.Surface.ROTATION_180, android.view.Surface.ROTATION_270}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageOutputConfig.RotationValue {
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageProxyBundle {
+    method public java.util.List<java.lang.Integer!> getCaptureIds();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.ImageProxy!> getImageProxy(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageReaderProxy {
+    method public androidx.camera.core.ImageProxy? acquireLatestImage();
+    method public androidx.camera.core.ImageProxy? acquireNextImage();
+    method public void close();
+    method public int getHeight();
+    method public int getImageFormat();
+    method public int getMaxImages();
+    method public android.view.Surface! getSurface();
+    method public int getWidth();
+    method public void setOnImageAvailableListener(androidx.camera.core.ImageReaderProxy.OnImageAvailableListener, android.os.Handler?);
+    method public void setOnImageAvailableListener(androidx.camera.core.ImageReaderProxy.OnImageAvailableListener, java.util.concurrent.Executor);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface ImageReaderProxy.OnImageAvailableListener {
+    method public void onImageAvailable(androidx.camera.core.ImageReaderProxy!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageReaderProxys {
+    method public static androidx.camera.core.ImageReaderProxy createIsolatedReader(int, int, int, int);
+    method public static androidx.camera.core.ImageReaderProxy createSharedReader(androidx.camera.core.CameraDeviceSurfaceManager, String, int, int, int, int, java.util.concurrent.Executor);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImmediateSurface extends androidx.camera.core.DeferrableSurface {
+    ctor public ImmediateSurface(android.view.Surface);
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class LensFacingCameraIdFilter implements androidx.camera.core.CameraIdFilter {
+    ctor public LensFacingCameraIdFilter(@androidx.camera.core.CameraSelector.LensFacing int);
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+    method @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class LensFacingConverter {
+    method public static String nameOf(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @androidx.camera.core.CameraSelector.LensFacing public static int valueOf(String?);
+    method public static Integer![] values();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getSurfaceAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public float getX();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public float getY();
+  }
+
+  public abstract class MeteringPointFactory {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public MeteringPointFactory();
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public MeteringPointFactory(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected abstract android.graphics.PointF convertPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class MultiValueSet<C> {
+    ctor public MultiValueSet();
+    method public void addAll(java.util.List<C!>!);
+    method public abstract androidx.camera.core.MultiValueSet<C!>! clone();
+    method public java.util.List<C!> getAllItems();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface MutableConfig extends androidx.camera.core.Config {
+    method public <ValueT> void insertOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT!);
+    method public <ValueT> ValueT? removeOption(androidx.camera.core.Config.Option<ValueT!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MutableOptionsBundle extends androidx.camera.core.OptionsBundle implements androidx.camera.core.MutableConfig {
+    method public static androidx.camera.core.MutableOptionsBundle! create();
+    method public static androidx.camera.core.MutableOptionsBundle! from(androidx.camera.core.Config!);
+    method public <ValueT> void insertOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT!);
+    method public <ValueT> ValueT? removeOption(androidx.camera.core.Config.Option<ValueT!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface Observable<T> {
+    method public void addObserver(java.util.concurrent.Executor, androidx.camera.core.Observable.Observer<T!>);
+    method public com.google.common.util.concurrent.ListenableFuture<T!> fetchData();
+    method public void removeObserver(androidx.camera.core.Observable.Observer<T!>);
+  }
+
+  public static interface Observable.Observer<T> {
+    method public void onError(Throwable);
+    method public void onNewData(T?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class OptionsBundle implements androidx.camera.core.Config {
+    method public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method public static androidx.camera.core.OptionsBundle emptyBundle();
+    method public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method public static androidx.camera.core.OptionsBundle from(androidx.camera.core.Config);
+    method public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field protected final java.util.TreeMap<androidx.camera.core.Config.Option<?>!,java.lang.Object!>! mOptions;
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Preview.Defaults! DEFAULT_CONFIG;
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.Preview.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.Preview.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.Preview,androidx.camera.core.PreviewConfig,androidx.camera.core.Preview.Builder> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.Preview.Builder fromConfig(androidx.camera.core.PreviewConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.PreviewConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCaptureProcessor(androidx.camera.core.CaptureProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setImageInfoProcessor(androidx.camera.core.ImageInfoProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setTargetClass(Class<androidx.camera.core.Preview!>);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Preview.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.PreviewConfig> {
+    ctor public Preview.Defaults();
+    method public androidx.camera.core.PreviewConfig! getConfig(Integer?);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class PreviewConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.Preview> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor? getCaptureProcessor(androidx.camera.core.CaptureProcessor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor getCaptureProcessor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.Preview!>? getTargetClass(Class<androidx.camera.core.Preview!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.Preview!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SessionConfig {
+    method public static androidx.camera.core.SessionConfig defaultEmptySessionConfig();
+    method public java.util.List<android.hardware.camera2.CameraDevice.StateCallback!> getDeviceStateCallbacks();
+    method public java.util.List<androidx.camera.core.SessionConfig.ErrorListener!> getErrorListeners();
+    method public androidx.camera.core.Config getImplementationOptions();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getRepeatingCameraCaptureCallbacks();
+    method public androidx.camera.core.CaptureConfig getRepeatingCaptureConfig();
+    method public java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!> getSessionStateCallbacks();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getSingleCameraCaptureCallbacks();
+    method public java.util.List<androidx.camera.core.DeferrableSurface!> getSurfaces();
+    method public int getTemplateType();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static class SessionConfig.Builder {
+    ctor public SessionConfig.Builder();
+    method public void addAllCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>);
+    method public void addAllDeviceStateCallbacks(java.util.Collection<android.hardware.camera2.CameraDevice.StateCallback!>);
+    method public void addAllRepeatingCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>);
+    method public void addAllSessionStateCallbacks(java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!>);
+    method public void addCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback);
+    method public void addDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method public void addErrorListener(androidx.camera.core.SessionConfig.ErrorListener);
+    method public void addImplementationOptions(androidx.camera.core.Config);
+    method public void addNonRepeatingSurface(androidx.camera.core.DeferrableSurface);
+    method public void addRepeatingCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback);
+    method public void addSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method public void addSurface(androidx.camera.core.DeferrableSurface);
+    method public androidx.camera.core.SessionConfig build();
+    method public void clearSurfaces();
+    method public static androidx.camera.core.SessionConfig.Builder createFrom(androidx.camera.core.UseCaseConfig<?>);
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getSingleCameraCaptureCallbacks();
+    method public void removeSurface(androidx.camera.core.DeferrableSurface);
+    method public void setImplementationOptions(androidx.camera.core.Config!);
+    method public void setTag(Object!);
+    method public void setTemplateType(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface SessionConfig.ErrorListener {
+    method public void onError(androidx.camera.core.SessionConfig, androidx.camera.core.SessionConfig.SessionError);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface SessionConfig.OptionUnpacker {
+    method public void unpack(androidx.camera.core.UseCaseConfig<?>, androidx.camera.core.SessionConfig.Builder);
+  }
+
+  public enum SessionConfig.SessionError {
+    enum_constant public static final androidx.camera.core.SessionConfig.SessionError SESSION_ERROR_SURFACE_NEEDS_RESET;
+    enum_constant public static final androidx.camera.core.SessionConfig.SessionError SESSION_ERROR_UNKNOWN;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class SessionConfig.ValidatingBuilder {
+    ctor public SessionConfig.ValidatingBuilder();
+    method public void add(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.SessionConfig build();
+    method public boolean isValid();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SingleImageProxyBundle implements androidx.camera.core.ImageProxyBundle {
+    ctor public SingleImageProxyBundle(androidx.camera.core.ImageProxy);
+    method public java.util.List<java.lang.Integer!> getCaptureIds();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.ImageProxy!> getImageProxy(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SurfaceCombination {
+    ctor public SurfaceCombination();
+    method public boolean addSurfaceConfig(androidx.camera.core.SurfaceConfig!);
+    method public java.util.List<androidx.camera.core.SurfaceConfig!>! getSurfaceConfigList();
+    method public boolean isSupported(java.util.List<androidx.camera.core.SurfaceConfig!>!);
+    method public boolean removeSurfaceConfig(androidx.camera.core.SurfaceConfig!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class SurfaceConfig {
+    method public static androidx.camera.core.SurfaceConfig! create(androidx.camera.core.SurfaceConfig.ConfigType!, androidx.camera.core.SurfaceConfig.ConfigSize!);
+    method public abstract androidx.camera.core.SurfaceConfig.ConfigSize! getConfigSize();
+    method public abstract androidx.camera.core.SurfaceConfig.ConfigType! getConfigType();
+    method public final boolean isSupported(androidx.camera.core.SurfaceConfig!);
+  }
+
+  public enum SurfaceConfig.ConfigSize {
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize ANALYSIS;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize MAXIMUM;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize NOT_SUPPORT;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize PREVIEW;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize RECORD;
+  }
+
+  public enum SurfaceConfig.ConfigType {
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType JPEG;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType PRIV;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType RAW;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType YUV;
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected android.graphics.PointF convertPoint(float, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class SurfaceSizeDefinition {
+    method public static androidx.camera.core.SurfaceSizeDefinition! create(android.util.Size!, android.util.Size!, android.util.Size!);
+    method public abstract android.util.Size! getAnalysisSize();
+    method public abstract android.util.Size! getPreviewSize();
+    method public abstract android.util.Size! getRecordSize();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface TargetConfig<T> {
+    method public Class<T!>? getTargetClass(Class<T!>?);
+    method public Class<T!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Class<?>!>! OPTION_TARGET_CLASS;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.String!>! OPTION_TARGET_NAME;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface TargetConfig.Builder<T, B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetClass(Class<T!>);
+    method public B setTargetName(String);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  @IntDef({androidx.camera.core.TorchState.OFF, androidx.camera.core.TorchState.ON}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TorchState.State {
+  }
+
+  public abstract class UseCase {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected UseCase(androidx.camera.core.UseCaseConfig<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void addStateChangeCallback(androidx.camera.core.UseCase.StateChangeCallback);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.UseCaseConfig<?> applyDefaults(androidx.camera.core.UseCaseConfig<?>, androidx.camera.core.UseCaseConfig.Builder<?,?,?>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final void attachCameraControl(String!, androidx.camera.core.CameraControlInternal!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void attachToCamera(String!, androidx.camera.core.SessionConfig!);
+    method @CallSuper @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void clear();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<java.lang.String!>! getAttachedCameraIds();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size! getAttachedSurfaceResolution(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraInternal? getBoundCamera();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected String getBoundCameraId();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.CameraControlInternal! getCameraControl(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.UseCaseConfig.Builder<?,?,?>? getDefaultBuilder(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getImageFormat();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String getName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig! getSessionConfig(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCaseConfig<?>! getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected boolean isCurrentlyBoundCamera(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyActive();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyInactive();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyReset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyState();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyUpdated();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void onBind(androidx.camera.core.CameraInternal);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void onCameraControlReady(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void onStateOffline(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void onStateOnline(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected abstract java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void removeStateChangeCallback(androidx.camera.core.UseCase.StateChangeCallback);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void setImageFormat(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void updateSuggestedResolution(java.util.Map<java.lang.String!,android.util.Size!>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void updateUseCaseConfig(androidx.camera.core.UseCaseConfig<?>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCase.EventCallback {
+    method public void onBind(String);
+    method public void onUnbind();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCase.StateChangeCallback {
+    method public void onUseCaseActive(androidx.camera.core.UseCase);
+    method public void onUseCaseInactive(androidx.camera.core.UseCase);
+    method public void onUseCaseReset(androidx.camera.core.UseCase);
+    method public void onUseCaseUpdated(androidx.camera.core.UseCase);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class UseCaseAttachState {
+    ctor public UseCaseAttachState(String!);
+    method public androidx.camera.core.SessionConfig.ValidatingBuilder! getActiveAndOnlineBuilder();
+    method public java.util.Collection<androidx.camera.core.UseCase!>! getActiveAndOnlineUseCases();
+    method public androidx.camera.core.SessionConfig.ValidatingBuilder! getOnlineBuilder();
+    method public java.util.Collection<androidx.camera.core.UseCase!>! getOnlineUseCases();
+    method public androidx.camera.core.SessionConfig! getUseCaseSessionConfig(androidx.camera.core.UseCase!);
+    method public boolean isUseCaseOnline(androidx.camera.core.UseCase!);
+    method public void setUseCaseActive(androidx.camera.core.UseCase!);
+    method public void setUseCaseInactive(androidx.camera.core.UseCase!);
+    method public void setUseCaseOffline(androidx.camera.core.UseCase!);
+    method public void setUseCaseOnline(androidx.camera.core.UseCase!);
+    method public void updateUseCase(androidx.camera.core.UseCase!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseConfig<T extends androidx.camera.core.UseCase> extends androidx.camera.core.TargetConfig<T> androidx.camera.core.Config androidx.camera.core.UseCaseEventConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CaptureConfig.OptionUnpacker!>! OPTION_CAPTURE_CONFIG_UNPACKER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CaptureConfig!>! OPTION_DEFAULT_CAPTURE_CONFIG;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.SessionConfig!>! OPTION_DEFAULT_SESSION_CONFIG;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.SessionConfig.OptionUnpacker!>! OPTION_SESSION_CONFIG_UNPACKER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_SURFACE_OCCUPANCY_PRIORITY;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCaseConfig.Builder<T extends androidx.camera.core.UseCase, C extends androidx.camera.core.UseCaseConfig<T>, B> extends androidx.camera.core.TargetConfig.Builder<T,B> androidx.camera.core.ExtendableBuilder<T> androidx.camera.core.UseCaseEventConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public C getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSurfaceOccupancyPriority(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseConfigFactory {
+    method public <C extends androidx.camera.core.UseCaseConfig<?>> C? getConfig(Class<C!>!, Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseEventConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.UseCase.EventCallback!>! OPTION_USE_CASE_EVENT_CALLBACK;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCaseEventConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class UseCaseGroup {
+    ctor public UseCaseGroup();
+    method public boolean addUseCase(androidx.camera.core.UseCase!);
+    method public void clear();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class VideoCapture extends androidx.camera.core.UseCase {
+    ctor public VideoCapture(androidx.camera.core.VideoCaptureConfig!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public void startRecording(java.io.File, java.util.concurrent.Executor, androidx.camera.core.VideoCapture.OnVideoSavedCallback);
+    method public void startRecording(java.io.File, androidx.camera.core.VideoCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.VideoCapture.OnVideoSavedCallback);
+    method public void stopRecording();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.VideoCapture.Defaults! DEFAULT_CONFIG;
+    field public static final int ERROR_ENCODER = 1; // 0x1
+    field public static final int ERROR_MUXER = 2; // 0x2
+    field public static final int ERROR_RECORDING_IN_PROGRESS = 3; // 0x3
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class VideoCapture.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.VideoCaptureConfig> {
+    ctor public VideoCapture.Defaults();
+    method public androidx.camera.core.VideoCaptureConfig! getConfig(Integer?);
+  }
+
+  public static final class VideoCapture.Metadata {
+    ctor public VideoCapture.Metadata();
+    field public android.location.Location? location;
+  }
+
+  public static interface VideoCapture.OnVideoSavedCallback {
+    method public void onError(@androidx.camera.core.VideoCapture.VideoCaptureError int, String, Throwable?);
+    method public void onVideoSaved(java.io.File);
+  }
+
+  @IntDef({androidx.camera.core.VideoCapture.ERROR_UNKNOWN, androidx.camera.core.VideoCapture.ERROR_ENCODER, androidx.camera.core.VideoCapture.ERROR_MUXER, androidx.camera.core.VideoCapture.ERROR_RECORDING_IN_PROGRESS}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface VideoCapture.VideoCaptureError {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class VideoCaptureConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.VideoCapture> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioBitRate();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioChannelCount(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioChannelCount();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioMinBufferSize(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioMinBufferSize();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioRecordSource(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioRecordSource();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioSampleRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioSampleRate();
+    method public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method public int getBitRate(int);
+    method public int getBitRate();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method public int getIFrameInterval(int);
+    method public int getIFrameInterval();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.VideoCapture!>? getTargetClass(Class<androidx.camera.core.VideoCapture!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.VideoCapture!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getTargetResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public int getVideoFrameRate(int);
+    method public int getVideoFrameRate();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  public static final class VideoCaptureConfig.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.VideoCaptureConfig.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.VideoCaptureConfig.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.VideoCapture,androidx.camera.core.VideoCaptureConfig,androidx.camera.core.VideoCaptureConfig.Builder> {
+    ctor public VideoCaptureConfig.Builder();
+    method public androidx.camera.core.VideoCapture build();
+    method public static androidx.camera.core.VideoCaptureConfig.Builder fromConfig(androidx.camera.core.VideoCaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method public androidx.camera.core.VideoCaptureConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioChannelCount(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioMinBufferSize(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioRecordSource(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioSampleRate(int);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setIFrameInterval(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetClass(Class<androidx.camera.core.VideoCapture!>);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetName(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setVideoFrameRate(int);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class LiveDataObservable<T> implements androidx.camera.core.Observable<T> {
+    ctor public LiveDataObservable();
+    method public void addObserver(java.util.concurrent.Executor, androidx.camera.core.Observable.Observer<T!>);
+    method public com.google.common.util.concurrent.ListenableFuture<T!> fetchData();
+    method public androidx.lifecycle.LiveData<androidx.camera.core.impl.LiveDataObservable.Result<T!>!> getLiveData();
+    method public void postError(Throwable);
+    method public void postValue(T?);
+    method public void removeObserver(androidx.camera.core.Observable.Observer<T!>);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.annotation {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface ExecutedBy {
+    method public abstract String value();
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.utils {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraSelectorUtil {
+    method public static androidx.camera.core.CameraDeviceConfig toCameraDeviceConfig(androidx.camera.core.CameraSelector);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MainThreadAsyncHandler {
+    method public static android.os.Handler! getInstance();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Threads {
+    method public static void checkBackgroundThread();
+    method public static void checkMainThread();
+    method public static boolean isBackgroundThread();
+    method public static boolean isMainThread();
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.utils.futures {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.FunctionalInterface public interface AsyncFunction<I, O> {
+    method public com.google.common.util.concurrent.ListenableFuture<O!>! apply(I?) throws java.lang.Exception;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface FutureCallback<V> {
+    method public void onFailure(Throwable!);
+    method public void onSuccess(V?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class FutureChain<V> implements com.google.common.util.concurrent.ListenableFuture<V> {
+    method public final void addCallback(androidx.camera.core.impl.utils.futures.FutureCallback<? super V>, java.util.concurrent.Executor);
+    method public void addListener(Runnable, java.util.concurrent.Executor);
+    method public boolean cancel(boolean);
+    method public static <V> androidx.camera.core.impl.utils.futures.FutureChain<V!> from(com.google.common.util.concurrent.ListenableFuture<V!>);
+    method public V? get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V? get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+    method public final <T> androidx.camera.core.impl.utils.futures.FutureChain<T!> transform(androidx.arch.core.util.Function<? super V,T!>, java.util.concurrent.Executor);
+    method public final <T> androidx.camera.core.impl.utils.futures.FutureChain<T!> transformAsync(androidx.camera.core.impl.utils.futures.AsyncFunction<? super V,T!>, java.util.concurrent.Executor);
+  }
+
+}
+
diff --git a/camera/camera-core/api/restricted_current.txt b/camera/camera-core/api/restricted_current.txt
new file mode 100644
index 0000000..5c7ebeb
--- /dev/null
+++ b/camera/camera-core/api/restricted_current.txt
@@ -0,0 +1,1460 @@
+// Signature format: 3.0
+package androidx.camera.core {
+
+  public class AspectRatio {
+    field public static final int RATIO_16_9 = 1; // 0x1
+    field public static final int RATIO_4_3 = 0; // 0x0
+  }
+
+  @IntDef({androidx.camera.core.AspectRatio.RATIO_4_3, androidx.camera.core.AspectRatio.RATIO_16_9}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface AspectRatio.Ratio {
+  }
+
+  public interface Camera {
+    method public androidx.camera.core.CameraControl getCameraControl();
+    method public androidx.camera.core.CameraInfo getCameraInfo();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class CameraCaptureCallback {
+    ctor public CameraCaptureCallback();
+    method public void onCaptureCancelled();
+    method public void onCaptureCompleted(androidx.camera.core.CameraCaptureResult);
+    method public void onCaptureFailed(androidx.camera.core.CameraCaptureFailure);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureCallbacks {
+    method public static androidx.camera.core.CameraCaptureCallback! createComboCallback(androidx.camera.core.CameraCaptureCallback!...);
+    method public static androidx.camera.core.CameraCaptureCallback! createNoOpCallback();
+  }
+
+  public static final class CameraCaptureCallbacks.ComboCameraCaptureCallback extends androidx.camera.core.CameraCaptureCallback {
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getCallbacks();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureFailure {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraCaptureFailure(androidx.camera.core.CameraCaptureFailure.Reason!);
+    method public androidx.camera.core.CameraCaptureFailure.Reason! getReason();
+  }
+
+  public enum CameraCaptureFailure.Reason {
+    enum_constant public static final androidx.camera.core.CameraCaptureFailure.Reason ERROR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureMetaData {
+  }
+
+  public enum CameraCaptureMetaData.AeState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState CONVERGED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState FLASH_REQUIRED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState LOCKED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState SEARCHING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AeState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AfMode {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode OFF;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode ON_CONTINUOUS_AUTO;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode ON_MANUAL_AUTO;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfMode UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AfState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState LOCKED_FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState LOCKED_NOT_FOCUSED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState SCANNING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AfState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.AwbState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState CONVERGED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState INACTIVE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState LOCKED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState METERING;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.AwbState UNKNOWN;
+  }
+
+  public enum CameraCaptureMetaData.FlashState {
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState FIRED;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState NONE;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState READY;
+    enum_constant public static final androidx.camera.core.CameraCaptureMetaData.FlashState UNKNOWN;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraCaptureResult {
+    method public androidx.camera.core.CameraCaptureMetaData.AeState getAeState();
+    method public androidx.camera.core.CameraCaptureMetaData.AfMode getAfMode();
+    method public androidx.camera.core.CameraCaptureMetaData.AfState getAfState();
+    method public androidx.camera.core.CameraCaptureMetaData.AwbState getAwbState();
+    method public androidx.camera.core.CameraCaptureMetaData.FlashState getFlashState();
+    method public Object! getTag();
+    method public long getTimestamp();
+  }
+
+  public static final class CameraCaptureResult.EmptyCameraCaptureResult implements androidx.camera.core.CameraCaptureResult {
+    ctor public CameraCaptureResult.EmptyCameraCaptureResult();
+    method public static androidx.camera.core.CameraCaptureResult! create();
+    method public androidx.camera.core.CameraCaptureMetaData.AeState getAeState();
+    method public androidx.camera.core.CameraCaptureMetaData.AfMode getAfMode();
+    method public androidx.camera.core.CameraCaptureMetaData.AfState getAfState();
+    method public androidx.camera.core.CameraCaptureMetaData.AwbState getAwbState();
+    method public androidx.camera.core.CameraCaptureMetaData.FlashState getFlashState();
+    method public Object! getTag();
+    method public long getTimestamp();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureResults {
+    method public static androidx.camera.core.CameraCaptureResult! retrieveCameraCaptureResult(androidx.camera.core.ImageInfo!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraCaptureSessionStateCallbacks {
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createComboCallback(java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!>!);
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createComboCallback(android.hardware.camera2.CameraCaptureSession.StateCallback!...);
+    method public static android.hardware.camera2.CameraCaptureSession.StateCallback! createNoOpCallback();
+  }
+
+  public interface CameraControl {
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> cancelFocusAndMetering();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> enableTorch(boolean);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setLinearZoom(@FloatRange(from=0.0f, to=1.0f) float);
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> setZoomRatio(float);
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.FocusMeteringResult!> startFocusAndMetering(androidx.camera.core.FocusMeteringAction);
+  }
+
+  public static final class CameraControl.OperationCanceledException extends java.lang.Exception {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraControl.OperationCanceledException(String);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraControl.OperationCanceledException(String, Throwable);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraControlInternal extends androidx.camera.core.CameraControl {
+    method public void cancelAfAeTrigger(boolean, boolean);
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method public void setCropRegion(android.graphics.Rect?);
+    method public void setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public void submitCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void triggerAePrecapture();
+    method public void triggerAf();
+    field public static final androidx.camera.core.CameraControlInternal! DEFAULT_EMPTY_INSTANCE;
+  }
+
+  public static interface CameraControlInternal.ControlUpdateCallback {
+    method public void onCameraControlCaptureRequests(java.util.List<androidx.camera.core.CaptureConfig!>);
+    method public void onCameraControlUpdateSessionConfig(androidx.camera.core.SessionConfig);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraDeviceConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CameraIdFilter!>! OPTION_CAMERA_ID_FILTER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_LENS_FACING;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface CameraDeviceConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraDeviceStateCallbacks {
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createComboCallback(java.util.List<android.hardware.camera2.CameraDevice.StateCallback!>!);
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createComboCallback(android.hardware.camera2.CameraDevice.StateCallback!...);
+    method public static android.hardware.camera2.CameraDevice.StateCallback! createNoOpCallback();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraDeviceSurfaceManager {
+    method public boolean checkSupported(String!, java.util.List<androidx.camera.core.SurfaceConfig!>!);
+    method public android.util.Rational? getCorrectedAspectRatio(String, @androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public android.util.Size? getMaxOutputSize(String!, int);
+    method public android.util.Size! getPreviewSize();
+    method public java.util.Map<androidx.camera.core.UseCase!,android.util.Size!>! getSuggestedResolutions(String!, java.util.List<androidx.camera.core.UseCase!>!, java.util.List<androidx.camera.core.UseCase!>!);
+    method public void init();
+    method public boolean isInitialized();
+    method public boolean requiresCorrectedAspectRatio(String);
+    method public androidx.camera.core.SurfaceConfig! transformSurfaceConfig(String!, int, android.util.Size!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraFactory {
+    method public String? cameraIdForLensFacing(@androidx.camera.core.CameraSelector.LensFacing int) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public java.util.Set<java.lang.String!> getAvailableCameraIds() throws androidx.camera.core.CameraInfoUnavailableException;
+    method public androidx.camera.core.CameraInternal getCamera(String) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public androidx.camera.core.LensFacingCameraIdFilter getLensFacingCameraIdFilter(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraIdFilter {
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraIdFilterSet implements androidx.camera.core.CameraIdFilter {
+    ctor public CameraIdFilterSet();
+    method public void addCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+    method public java.util.Set<androidx.camera.core.CameraIdFilter!> getCameraIdFilters();
+  }
+
+  public interface CameraInfo {
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getLinearZoom();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMaxZoomRatio();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getMinZoomRatio();
+    method public int getSensorRotationDegrees();
+    method public int getSensorRotationDegrees(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public androidx.lifecycle.LiveData<java.lang.Integer!> getTorchState();
+    method public androidx.lifecycle.LiveData<java.lang.Float!> getZoomRatio();
+    method public boolean hasFlashUnit();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraInfoInternal extends androidx.camera.core.CameraInfo {
+    method public String getCameraId();
+    method public Integer? getLensFacing();
+  }
+
+  public final class CameraInfoUnavailableException extends java.lang.Exception {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraInfoUnavailableException(String!, Throwable!);
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public CameraInfoUnavailableException(String!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CameraInternal extends androidx.camera.core.Camera androidx.camera.core.UseCase.StateChangeCallback {
+    method public void addOnlineUseCase(java.util.Collection<androidx.camera.core.UseCase!>);
+    method public void close();
+    method public androidx.camera.core.CameraControlInternal getCameraControlInternal();
+    method public androidx.camera.core.CameraInfoInternal getCameraInfoInternal();
+    method public androidx.camera.core.Observable<androidx.camera.core.CameraInternal.State!> getCameraState();
+    method public void open();
+    method public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> release();
+    method public void removeOnlineUseCase(java.util.Collection<androidx.camera.core.UseCase!>);
+  }
+
+  public enum CameraInternal.State {
+    enum_constant public static final androidx.camera.core.CameraInternal.State CLOSED;
+    enum_constant public static final androidx.camera.core.CameraInternal.State CLOSING;
+    enum_constant public static final androidx.camera.core.CameraInternal.State OPEN;
+    enum_constant public static final androidx.camera.core.CameraInternal.State OPENING;
+    enum_constant public static final androidx.camera.core.CameraInternal.State PENDING_OPEN;
+    enum_constant public static final androidx.camera.core.CameraInternal.State RELEASED;
+    enum_constant public static final androidx.camera.core.CameraInternal.State RELEASING;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraOrientationUtil {
+    method public static int getRelativeImageRotation(int, int, boolean);
+    method public static int surfaceRotationToDegrees(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraRepository {
+    ctor public CameraRepository();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> deinit();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraInternal! getCamera(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void init(androidx.camera.core.CameraFactory!);
+    method public void onGroupActive(androidx.camera.core.UseCaseGroup!);
+    method public void onGroupInactive(androidx.camera.core.UseCaseGroup!);
+  }
+
+  public final class CameraSelector {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.LinkedHashSet<androidx.camera.core.CameraIdFilter!> getCameraFilterSet();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String select(java.util.Set<java.lang.String!>);
+    field public static final androidx.camera.core.CameraSelector DEFAULT_BACK_CAMERA;
+    field public static final androidx.camera.core.CameraSelector DEFAULT_FRONT_CAMERA;
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+  }
+
+  public static final class CameraSelector.Builder {
+    ctor public CameraSelector.Builder();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraSelector.Builder appendFilter(androidx.camera.core.CameraIdFilter);
+    method public androidx.camera.core.CameraSelector build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraSelector.Builder fromSelector(androidx.camera.core.CameraSelector);
+    method public androidx.camera.core.CameraSelector.Builder requireLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+  }
+
+  @IntDef({androidx.camera.core.CameraSelector.LENS_FACING_FRONT, androidx.camera.core.CameraSelector.LENS_FACING_BACK}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface CameraSelector.LensFacing {
+  }
+
+  @MainThread @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraX {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static java.util.Collection<androidx.camera.core.UseCase!>? getActiveUseCases();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraFactory getCameraFactory();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraInfoInternal getCameraInfo(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static String? getCameraWithCameraSelector(androidx.camera.core.CameraSelector);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static String? getCameraWithLensFacing(@androidx.camera.core.CameraSelector.LensFacing int) throws androidx.camera.core.CameraInfoUnavailableException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static android.content.Context getContext();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public static int getDefaultLensFacing() throws androidx.camera.core.CameraInfoUnavailableException;
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static <C extends androidx.camera.core.UseCaseConfig<?>> C? getDefaultUseCaseConfig(Class<C!>!, Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.CameraX!> getOrCreateInstance(android.content.Context);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.CameraDeviceSurfaceManager getSurfaceManager();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> initialize(android.content.Context, androidx.camera.core.CameraXConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean isBound(androidx.camera.core.UseCase);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static boolean isInitialized();
+    method public static com.google.common.util.concurrent.ListenableFuture<java.lang.Void!> shutdown();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void unbind(androidx.camera.core.UseCase!...);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static void unbindAll();
+  }
+
+  public final class CameraXConfig implements androidx.camera.core.Config androidx.camera.core.TargetConfig<androidx.camera.core.CameraX> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.concurrent.Executor? getCameraExecutor(java.util.concurrent.Executor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraFactory? getCameraFactory(androidx.camera.core.CameraFactory?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraDeviceSurfaceManager? getDeviceSurfaceManager(androidx.camera.core.CameraDeviceSurfaceManager?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.CameraX!>? getTargetClass(Class<androidx.camera.core.CameraX!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.CameraX!> getTargetClass();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String? getTargetName(String?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String getTargetName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCaseConfigFactory? getUseCaseConfigRepository(androidx.camera.core.UseCaseConfigFactory?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+  }
+
+  public static final class CameraXConfig.Builder implements androidx.camera.core.TargetConfig.Builder<androidx.camera.core.CameraX,androidx.camera.core.CameraXConfig.Builder> {
+    ctor public CameraXConfig.Builder();
+    method public androidx.camera.core.CameraXConfig build();
+    method public static androidx.camera.core.CameraXConfig.Builder fromConfig(androidx.camera.core.CameraXConfig);
+    method public androidx.camera.core.CameraXConfig.Builder setCameraExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setCameraFactory(androidx.camera.core.CameraFactory);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setDeviceSurfaceManager(androidx.camera.core.CameraDeviceSurfaceManager);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setTargetClass(Class<androidx.camera.core.CameraX!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setTargetName(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraXConfig.Builder setUseCaseConfigFactory(androidx.camera.core.UseCaseConfigFactory);
+  }
+
+  public static interface CameraXConfig.Provider {
+    method public androidx.camera.core.CameraXConfig getCameraXConfig();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraXThreads {
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final String TAG = "CameraX-";
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureBundle {
+    method public java.util.List<androidx.camera.core.CaptureStage!>! getCaptureStages();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CaptureConfig {
+    method public static androidx.camera.core.CaptureConfig! defaultEmptyCaptureConfig();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!>! getCameraCaptureCallbacks();
+    method public androidx.camera.core.Config! getImplementationOptions();
+    method public java.util.List<androidx.camera.core.DeferrableSurface!>! getSurfaces();
+    method public Object! getTag();
+    method public int getTemplateType();
+    method public boolean isUseRepeatingSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class CaptureConfig.Builder {
+    ctor public CaptureConfig.Builder();
+    method public void addAllCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>!);
+    method public void addCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback!);
+    method public void addImplementationOptions(androidx.camera.core.Config!);
+    method public void addSurface(androidx.camera.core.DeferrableSurface!);
+    method public androidx.camera.core.CaptureConfig! build();
+    method public void clearSurfaces();
+    method public static androidx.camera.core.CaptureConfig.Builder! createFrom(androidx.camera.core.UseCaseConfig<?>!);
+    method public static androidx.camera.core.CaptureConfig.Builder! from(androidx.camera.core.CaptureConfig!);
+    method public androidx.camera.core.Config! getImplementationOptions();
+    method public java.util.Set<androidx.camera.core.DeferrableSurface!> getSurfaces();
+    method public void removeSurface(androidx.camera.core.DeferrableSurface!);
+    method public void setImplementationOptions(androidx.camera.core.Config!);
+    method public void setTag(Object!);
+    method public void setTemplateType(int);
+    method public void setUseRepeatingSurface(boolean);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface CaptureConfig.OptionUnpacker {
+    method public void unpack(androidx.camera.core.UseCaseConfig<?>!, androidx.camera.core.CaptureConfig.Builder!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureProcessor {
+    method public void onOutputSurface(android.view.Surface!, int);
+    method public void onResolutionUpdate(android.util.Size!);
+    method public void process(androidx.camera.core.ImageProxyBundle!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface CaptureStage {
+    method public androidx.camera.core.CaptureConfig! getCaptureConfig();
+    method public int getId();
+  }
+
+  public static final class CaptureStage.DefaultCaptureStage implements androidx.camera.core.CaptureStage {
+    method public androidx.camera.core.CaptureConfig! getCaptureConfig();
+    method public int getId();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface Config {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String!, androidx.camera.core.Config.OptionMatcher!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!>! listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT! retrieveOption(androidx.camera.core.Config.Option<ValueT!>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract static class Config.Option<T> {
+    method public static <T> androidx.camera.core.Config.Option<T!>! create(String!, Class<?>!);
+    method public static <T> androidx.camera.core.Config.Option<T!>! create(String!, Class<?>!, Object?);
+    method public abstract String! getId();
+    method public abstract Object? getToken();
+    method public abstract Class<T!>! getValueClass();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface Config.OptionMatcher {
+    method public boolean onOptionMatched(androidx.camera.core.Config.Option<?>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ConfigProvider<C extends androidx.camera.core.Config> {
+    method public C! getConfig(Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class DeferrableSurface {
+    ctor public DeferrableSurface();
+    method public final void close();
+    method public final com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> getSurface();
+    method public void notifySurfaceAttached();
+    method public void notifySurfaceDetached();
+    method public void setOnSurfaceDetachedListener(java.util.concurrent.Executor, androidx.camera.core.DeferrableSurface.OnSurfaceDetachedListener);
+    field protected static final String TAG = "DeferrableSurface";
+  }
+
+  public static interface DeferrableSurface.OnSurfaceDetachedListener {
+    method public void onSurfaceDetached();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class DeferrableSurface.SurfaceClosedException extends java.lang.Exception {
+    ctor public DeferrableSurface.SurfaceClosedException(String, Throwable, androidx.camera.core.DeferrableSurface);
+    ctor public DeferrableSurface.SurfaceClosedException(String, androidx.camera.core.DeferrableSurface);
+    method public androidx.camera.core.DeferrableSurface getDeferrableSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class DeferrableSurfaces {
+    method public static com.google.common.util.concurrent.ListenableFuture<java.util.List<android.view.Surface!>!> surfaceListWithTimeout(java.util.Collection<androidx.camera.core.DeferrableSurface!>, boolean, long, java.util.concurrent.Executor, java.util.concurrent.ScheduledExecutorService);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class DeviceProperties {
+    ctor public DeviceProperties();
+    method public static androidx.camera.core.DeviceProperties! create();
+    method public static androidx.camera.core.DeviceProperties! create(String!, String!, int);
+    method public abstract String! manufacturer();
+    method public abstract String! model();
+    method public abstract int sdkVersion();
+  }
+
+  public final class DisplayOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public DisplayOrientedMeteringPointFactory(android.content.Context, androidx.camera.core.CameraSelector, float, float);
+    ctor public DisplayOrientedMeteringPointFactory(android.view.Display, androidx.camera.core.CameraSelector, float, float);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected android.graphics.PointF convertPoint(float, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Exif {
+    method public void attachLocation(android.location.Location!);
+    method public void attachTimestamp();
+    method public static androidx.camera.core.Exif! createFromFile(java.io.File!) throws java.io.IOException;
+    method public static androidx.camera.core.Exif! createFromFileString(String!) throws java.io.IOException;
+    method public static androidx.camera.core.Exif! createFromInputStream(java.io.InputStream!) throws java.io.IOException;
+    method public void flipHorizontally();
+    method public void flipVertically();
+    method public String? getDescription();
+    method public int getHeight();
+    method public long getLastModifiedTimestamp();
+    method public android.location.Location? getLocation();
+    method public int getRotation();
+    method public long getTimestamp();
+    method public int getWidth();
+    method public boolean isFlippedHorizontally();
+    method public boolean isFlippedVertically();
+    method public void removeLocation();
+    method public void removeTimestamp();
+    method public void rotate(int);
+    method public void save() throws java.io.IOException;
+    method public void setDescription(String?);
+    field public static final long INVALID_TIMESTAMP = -1L; // 0xffffffffffffffffL
+  }
+
+  public interface ExtendableBuilder<T> {
+    method public T build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ExtendableUseCaseConfigFactory implements androidx.camera.core.UseCaseConfigFactory {
+    ctor public ExtendableUseCaseConfigFactory();
+    method public <C extends androidx.camera.core.UseCaseConfig<?>> C? getConfig(Class<C!>!, Integer?);
+    method public <C extends androidx.camera.core.Config> void installDefaultProvider(Class<C!>!, androidx.camera.core.ConfigProvider<C!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class FlashModeHelper {
+    method public static String nameOf(@androidx.camera.core.ImageCapture.FlashMode int);
+    method @androidx.camera.core.ImageCapture.FlashMode public static int valueOf(String?);
+  }
+
+  public final class FocusMeteringAction {
+    method public long getAutoCancelDurationInMillis();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAe();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAf();
+    method public java.util.List<androidx.camera.core.MeteringPoint!> getMeteringPointsAwb();
+    method public boolean isAutoCancelEnabled();
+    field public static final int FLAG_AE = 2; // 0x2
+    field public static final int FLAG_AF = 1; // 0x1
+    field public static final int FLAG_AWB = 4; // 0x4
+  }
+
+  public static class FocusMeteringAction.Builder {
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint);
+    method public androidx.camera.core.FocusMeteringAction.Builder addPoint(androidx.camera.core.MeteringPoint, @androidx.camera.core.FocusMeteringAction.MeteringMode int);
+    method public androidx.camera.core.FocusMeteringAction build();
+    method public androidx.camera.core.FocusMeteringAction.Builder disableAutoCancel();
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint);
+    method public static androidx.camera.core.FocusMeteringAction.Builder from(androidx.camera.core.MeteringPoint, @androidx.camera.core.FocusMeteringAction.MeteringMode int);
+    method public androidx.camera.core.FocusMeteringAction.Builder setAutoCancelDuration(@IntRange(from=1) long, java.util.concurrent.TimeUnit);
+  }
+
+  @IntDef(flag=true, value={androidx.camera.core.FocusMeteringAction.FLAG_AF, androidx.camera.core.FocusMeteringAction.FLAG_AE, androidx.camera.core.FocusMeteringAction.FLAG_AWB}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface FocusMeteringAction.MeteringMode {
+  }
+
+  public final class FocusMeteringResult {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.FocusMeteringResult create(boolean);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.FocusMeteringResult emptyInstance();
+    method public boolean isFocusSuccessful();
+  }
+
+  public final class ImageAnalysis extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method public void clearAnalyzer();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setAnalyzer(java.util.concurrent.Executor, androidx.camera.core.ImageAnalysis.Analyzer);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.ImageAnalysis.Defaults! DEFAULT_CONFIG;
+    field public static final int STRATEGY_BLOCK_PRODUCER = 1; // 0x1
+    field public static final int STRATEGY_KEEP_ONLY_LATEST = 0; // 0x0
+  }
+
+  public static interface ImageAnalysis.Analyzer {
+    method public void analyze(androidx.camera.core.ImageProxy);
+  }
+
+  @IntDef({androidx.camera.core.ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST, androidx.camera.core.ImageAnalysis.STRATEGY_BLOCK_PRODUCER}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageAnalysis.BackpressureStrategy {
+  }
+
+  public static final class ImageAnalysis.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.ImageAnalysis.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.ImageAnalysis.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.ImageAnalysis,androidx.camera.core.ImageAnalysisConfig,androidx.camera.core.ImageAnalysis.Builder> {
+    ctor public ImageAnalysis.Builder();
+    method public androidx.camera.core.ImageAnalysis build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.ImageAnalysis.Builder fromConfig(androidx.camera.core.ImageAnalysisConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysisConfig getUseCaseConfig();
+    method public androidx.camera.core.ImageAnalysis.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.ImageAnalysis.Builder setBackpressureStrategy(@androidx.camera.core.ImageAnalysis.BackpressureStrategy int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.ImageAnalysis.Builder setImageQueueDepth(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setTargetClass(Class<androidx.camera.core.ImageAnalysis!>);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetName(String);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageAnalysis.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageAnalysis.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class ImageAnalysis.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.ImageAnalysisConfig> {
+    ctor public ImageAnalysis.Defaults();
+    method public androidx.camera.core.ImageAnalysisConfig getConfig(Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageAnalysisConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.ImageAnalysis> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method @androidx.camera.core.ImageAnalysis.BackpressureStrategy public int getBackpressureStrategy(@androidx.camera.core.ImageAnalysis.BackpressureStrategy int);
+    method @androidx.camera.core.ImageAnalysis.BackpressureStrategy public int getBackpressureStrategy();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method public int getImageQueueDepth(int);
+    method public int getImageQueueDepth();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageAnalysis!>? getTargetClass(Class<androidx.camera.core.ImageAnalysis!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageAnalysis!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  public class ImageCapture extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public void setTargetAspectRatioCustom(android.util.Rational);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public void takePicture(java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageCapturedCallback);
+    method public void takePicture(java.io.File, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    method public void takePicture(java.io.File, androidx.camera.core.ImageCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.ImageCapture.OnImageSavedCallback);
+    field public static final int CAPTURE_MODE_MAXIMIZE_QUALITY = 0; // 0x0
+    field public static final int CAPTURE_MODE_MINIMIZE_LATENCY = 1; // 0x1
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.ImageCapture.Defaults! DEFAULT_CONFIG;
+    field public static final int ERROR_CAMERA_CLOSED = 3; // 0x3
+    field public static final int ERROR_CAPTURE_FAILED = 2; // 0x2
+    field public static final int ERROR_FILE_IO = 1; // 0x1
+    field public static final int ERROR_INVALID_CAMERA = 4; // 0x4
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+    field public static final int FLASH_MODE_AUTO = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 2; // 0x2
+    field public static final int FLASH_MODE_ON = 1; // 0x1
+  }
+
+  public static final class ImageCapture.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.ImageCapture.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.ImageCapture.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.ImageCapture,androidx.camera.core.ImageCaptureConfig,androidx.camera.core.ImageCapture.Builder> {
+    ctor public ImageCapture.Builder();
+    method public androidx.camera.core.ImageCapture build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.ImageCapture.Builder fromConfig(androidx.camera.core.ImageCaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCaptureConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setBufferFormat(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureBundle(androidx.camera.core.CaptureBundle);
+    method public androidx.camera.core.ImageCapture.Builder setCaptureMode(@androidx.camera.core.ImageCapture.CaptureMode int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setCaptureProcessor(androidx.camera.core.CaptureProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.ImageCapture.Builder setFlashMode(@androidx.camera.core.ImageCapture.FlashMode int);
+    method public androidx.camera.core.ImageCapture.Builder setIoExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setMaxCaptureStages(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.ImageCapture.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setTargetClass(Class<androidx.camera.core.ImageCapture!>);
+    method public androidx.camera.core.ImageCapture.Builder setTargetName(String);
+    method public androidx.camera.core.ImageCapture.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.ImageCapture.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.ImageCapture.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.CAPTURE_MODE_MAXIMIZE_QUALITY, androidx.camera.core.ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.CaptureMode {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class ImageCapture.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.ImageCaptureConfig> {
+    ctor public ImageCapture.Defaults();
+    method public androidx.camera.core.ImageCaptureConfig! getConfig(Integer?);
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.FLASH_MODE_AUTO, androidx.camera.core.ImageCapture.FLASH_MODE_ON, androidx.camera.core.ImageCapture.FLASH_MODE_OFF}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.FlashMode {
+  }
+
+  @IntDef({androidx.camera.core.ImageCapture.ERROR_UNKNOWN, androidx.camera.core.ImageCapture.ERROR_FILE_IO, androidx.camera.core.ImageCapture.ERROR_CAPTURE_FAILED, androidx.camera.core.ImageCapture.ERROR_CAMERA_CLOSED, androidx.camera.core.ImageCapture.ERROR_INVALID_CAMERA}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageCapture.ImageCaptureError {
+  }
+
+  public static final class ImageCapture.Metadata {
+    ctor public ImageCapture.Metadata();
+    method public android.location.Location? getLocation();
+    method public boolean isReversedHorizontal();
+    method public boolean isReversedVertical();
+    method public void setLocation(android.location.Location?);
+    method public void setReversedHorizontal(boolean);
+    method public void setReversedVertical(boolean);
+  }
+
+  public abstract static class ImageCapture.OnImageCapturedCallback {
+    ctor public ImageCapture.OnImageCapturedCallback();
+    method public void onCaptureSuccess(androidx.camera.core.ImageProxy);
+    method public void onError(@androidx.camera.core.ImageCapture.ImageCaptureError int, String, Throwable?);
+  }
+
+  public static interface ImageCapture.OnImageSavedCallback {
+    method public void onError(@androidx.camera.core.ImageCapture.ImageCaptureError int, String, Throwable?);
+    method public void onImageSaved(java.io.File);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageCaptureConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.ImageCapture> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getBufferFormat(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer getBufferFormat();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureBundle? getCaptureBundle(androidx.camera.core.CaptureBundle?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureBundle getCaptureBundle();
+    method @androidx.camera.core.ImageCapture.CaptureMode public int getCaptureMode();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor? getCaptureProcessor(androidx.camera.core.CaptureProcessor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor getCaptureProcessor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @androidx.camera.core.ImageCapture.FlashMode public int getFlashMode();
+    method public java.util.concurrent.Executor? getIoExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getIoExecutor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getMaxCaptureStages(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getMaxCaptureStages();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageCapture!>? getTargetClass(Class<androidx.camera.core.ImageCapture!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.ImageCapture!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasCaptureMode();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_IO_EXECUTOR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageFormatConstants {
+    field public static final int INTERNAL_DEFINED_IMAGE_FORMAT_JPEG = 33; // 0x21
+    field public static final int INTERNAL_DEFINED_IMAGE_FORMAT_PRIVATE = 34; // 0x22
+  }
+
+  public interface ImageInfo {
+    method public int getRotationDegrees();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Object? getTag();
+    method public long getTimestamp();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageInfoProcessor {
+    method public androidx.camera.core.CaptureStage! getCaptureStage();
+    method public boolean process(androidx.camera.core.ImageInfo!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageOutputConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getTargetResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method public boolean hasTargetAspectRatio();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final int INVALID_ROTATION = -1; // 0xffffffff
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_DEFAULT_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_MAX_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>!>! OPTION_SUPPORTED_RESOLUTIONS;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_TARGET_ASPECT_RATIO;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Rational!>! OPTION_TARGET_ASPECT_RATIO_CUSTOM;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<android.util.Size!>! OPTION_TARGET_RESOLUTION;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_TARGET_ROTATION;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface ImageOutputConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method public B setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetResolution(android.util.Size);
+    method public B setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+  }
+
+  @IntDef({android.view.Surface.ROTATION_0, android.view.Surface.ROTATION_90, android.view.Surface.ROTATION_180, android.view.Surface.ROTATION_270}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface ImageOutputConfig.RotationValue {
+  }
+
+  public interface ImageProxy extends java.lang.AutoCloseable {
+    method public void close();
+    method public android.graphics.Rect getCropRect();
+    method public int getFormat();
+    method public int getHeight();
+    method public androidx.camera.core.ImageInfo getImageInfo();
+    method public androidx.camera.core.ImageProxy.PlaneProxy![] getPlanes();
+    method public int getWidth();
+    method public void setCropRect(android.graphics.Rect?);
+  }
+
+  public static interface ImageProxy.PlaneProxy {
+    method public java.nio.ByteBuffer getBuffer();
+    method public int getPixelStride();
+    method public int getRowStride();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageProxyBundle {
+    method public java.util.List<java.lang.Integer!> getCaptureIds();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.ImageProxy!> getImageProxy(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface ImageReaderProxy {
+    method public androidx.camera.core.ImageProxy? acquireLatestImage();
+    method public androidx.camera.core.ImageProxy? acquireNextImage();
+    method public void close();
+    method public int getHeight();
+    method public int getImageFormat();
+    method public int getMaxImages();
+    method public android.view.Surface! getSurface();
+    method public int getWidth();
+    method public void setOnImageAvailableListener(androidx.camera.core.ImageReaderProxy.OnImageAvailableListener, android.os.Handler?);
+    method public void setOnImageAvailableListener(androidx.camera.core.ImageReaderProxy.OnImageAvailableListener, java.util.concurrent.Executor);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface ImageReaderProxy.OnImageAvailableListener {
+    method public void onImageAvailable(androidx.camera.core.ImageReaderProxy!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImageReaderProxys {
+    method public static androidx.camera.core.ImageReaderProxy createIsolatedReader(int, int, int, int);
+    method public static androidx.camera.core.ImageReaderProxy createSharedReader(androidx.camera.core.CameraDeviceSurfaceManager, String, int, int, int, int, java.util.concurrent.Executor);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class ImmediateSurface extends androidx.camera.core.DeferrableSurface {
+    ctor public ImmediateSurface(android.view.Surface);
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class LensFacingCameraIdFilter implements androidx.camera.core.CameraIdFilter {
+    ctor public LensFacingCameraIdFilter(@androidx.camera.core.CameraSelector.LensFacing int);
+    method public java.util.Set<java.lang.String!> filter(java.util.Set<java.lang.String!>);
+    method @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class LensFacingConverter {
+    method public static String nameOf(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @androidx.camera.core.CameraSelector.LensFacing public static int valueOf(String?);
+    method public static Integer![] values();
+  }
+
+  public class MeteringPoint {
+    method public float getSize();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getSurfaceAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public float getX();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public float getY();
+  }
+
+  public abstract class MeteringPointFactory {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public MeteringPointFactory();
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public MeteringPointFactory(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected abstract android.graphics.PointF convertPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float);
+    method public final androidx.camera.core.MeteringPoint createPoint(float, float, float);
+    method public static float getDefaultPointSize();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class MultiValueSet<C> {
+    ctor public MultiValueSet();
+    method public void addAll(java.util.List<C!>!);
+    method public abstract androidx.camera.core.MultiValueSet<C!>! clone();
+    method public java.util.List<C!> getAllItems();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface MutableConfig extends androidx.camera.core.Config {
+    method public <ValueT> void insertOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT!);
+    method public <ValueT> ValueT? removeOption(androidx.camera.core.Config.Option<ValueT!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MutableOptionsBundle extends androidx.camera.core.OptionsBundle implements androidx.camera.core.MutableConfig {
+    method public static androidx.camera.core.MutableOptionsBundle! create();
+    method public static androidx.camera.core.MutableOptionsBundle! from(androidx.camera.core.Config!);
+    method public <ValueT> void insertOption(androidx.camera.core.Config.Option<ValueT!>!, ValueT!);
+    method public <ValueT> ValueT? removeOption(androidx.camera.core.Config.Option<ValueT!>!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface Observable<T> {
+    method public void addObserver(java.util.concurrent.Executor, androidx.camera.core.Observable.Observer<T!>);
+    method public com.google.common.util.concurrent.ListenableFuture<T!> fetchData();
+    method public void removeObserver(androidx.camera.core.Observable.Observer<T!>);
+  }
+
+  public static interface Observable.Observer<T> {
+    method public void onError(Throwable);
+    method public void onNewData(T?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class OptionsBundle implements androidx.camera.core.Config {
+    method public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method public static androidx.camera.core.OptionsBundle emptyBundle();
+    method public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method public static androidx.camera.core.OptionsBundle from(androidx.camera.core.Config);
+    method public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field protected final java.util.TreeMap<androidx.camera.core.Config.Option<?>!,java.lang.Object!>! mOptions;
+  }
+
+  public class Preview extends androidx.camera.core.UseCase {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @UiThread public androidx.camera.core.Preview.PreviewSurfaceProvider? getPreviewSurfaceProvider();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method @UiThread public void setPreviewSurfaceProvider(java.util.concurrent.Executor, androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    method @UiThread public void setPreviewSurfaceProvider(androidx.camera.core.Preview.PreviewSurfaceProvider?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Preview.Defaults! DEFAULT_CONFIG;
+  }
+
+  public static final class Preview.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.Preview.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.Preview.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.Preview,androidx.camera.core.PreviewConfig,androidx.camera.core.Preview.Builder> {
+    ctor public Preview.Builder();
+    method public androidx.camera.core.Preview build();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static androidx.camera.core.Preview.Builder fromConfig(androidx.camera.core.PreviewConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.PreviewConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setCaptureProcessor(androidx.camera.core.CaptureProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setImageInfoProcessor(androidx.camera.core.ImageInfoProcessor);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.Preview.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setTargetClass(Class<androidx.camera.core.Preview!>);
+    method public androidx.camera.core.Preview.Builder setTargetName(String);
+    method public androidx.camera.core.Preview.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.Preview.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.Preview.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class Preview.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.PreviewConfig> {
+    ctor public Preview.Defaults();
+    method public androidx.camera.core.PreviewConfig! getConfig(Integer?);
+  }
+
+  public static interface Preview.PreviewSurfaceProvider {
+    method public com.google.common.util.concurrent.ListenableFuture<android.view.Surface!> provideSurface(android.util.Size, com.google.common.util.concurrent.ListenableFuture<java.lang.Void!>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class PreviewConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.Preview> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor? getCaptureProcessor(androidx.camera.core.CaptureProcessor?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureProcessor getCaptureProcessor();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.Preview!>? getTargetClass(Class<androidx.camera.core.Preview!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.Preview!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method public android.util.Size? getTargetResolution(android.util.Size?);
+    method public android.util.Size getTargetResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SessionConfig {
+    method public static androidx.camera.core.SessionConfig defaultEmptySessionConfig();
+    method public java.util.List<android.hardware.camera2.CameraDevice.StateCallback!> getDeviceStateCallbacks();
+    method public java.util.List<androidx.camera.core.SessionConfig.ErrorListener!> getErrorListeners();
+    method public androidx.camera.core.Config getImplementationOptions();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getRepeatingCameraCaptureCallbacks();
+    method public androidx.camera.core.CaptureConfig getRepeatingCaptureConfig();
+    method public java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!> getSessionStateCallbacks();
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getSingleCameraCaptureCallbacks();
+    method public java.util.List<androidx.camera.core.DeferrableSurface!> getSurfaces();
+    method public int getTemplateType();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static class SessionConfig.Builder {
+    ctor public SessionConfig.Builder();
+    method public void addAllCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>);
+    method public void addAllDeviceStateCallbacks(java.util.Collection<android.hardware.camera2.CameraDevice.StateCallback!>);
+    method public void addAllRepeatingCameraCaptureCallbacks(java.util.Collection<androidx.camera.core.CameraCaptureCallback!>);
+    method public void addAllSessionStateCallbacks(java.util.List<android.hardware.camera2.CameraCaptureSession.StateCallback!>);
+    method public void addCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback);
+    method public void addDeviceStateCallback(android.hardware.camera2.CameraDevice.StateCallback);
+    method public void addErrorListener(androidx.camera.core.SessionConfig.ErrorListener);
+    method public void addImplementationOptions(androidx.camera.core.Config);
+    method public void addNonRepeatingSurface(androidx.camera.core.DeferrableSurface);
+    method public void addRepeatingCameraCaptureCallback(androidx.camera.core.CameraCaptureCallback);
+    method public void addSessionStateCallback(android.hardware.camera2.CameraCaptureSession.StateCallback);
+    method public void addSurface(androidx.camera.core.DeferrableSurface);
+    method public androidx.camera.core.SessionConfig build();
+    method public void clearSurfaces();
+    method public static androidx.camera.core.SessionConfig.Builder createFrom(androidx.camera.core.UseCaseConfig<?>);
+    method public java.util.List<androidx.camera.core.CameraCaptureCallback!> getSingleCameraCaptureCallbacks();
+    method public void removeSurface(androidx.camera.core.DeferrableSurface);
+    method public void setImplementationOptions(androidx.camera.core.Config!);
+    method public void setTag(Object!);
+    method public void setTemplateType(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface SessionConfig.ErrorListener {
+    method public void onError(androidx.camera.core.SessionConfig, androidx.camera.core.SessionConfig.SessionError);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface SessionConfig.OptionUnpacker {
+    method public void unpack(androidx.camera.core.UseCaseConfig<?>, androidx.camera.core.SessionConfig.Builder);
+  }
+
+  public enum SessionConfig.SessionError {
+    enum_constant public static final androidx.camera.core.SessionConfig.SessionError SESSION_ERROR_SURFACE_NEEDS_RESET;
+    enum_constant public static final androidx.camera.core.SessionConfig.SessionError SESSION_ERROR_UNKNOWN;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class SessionConfig.ValidatingBuilder {
+    ctor public SessionConfig.ValidatingBuilder();
+    method public void add(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.SessionConfig build();
+    method public boolean isValid();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SingleImageProxyBundle implements androidx.camera.core.ImageProxyBundle {
+    ctor public SingleImageProxyBundle(androidx.camera.core.ImageProxy);
+    method public java.util.List<java.lang.Integer!> getCaptureIds();
+    method public com.google.common.util.concurrent.ListenableFuture<androidx.camera.core.ImageProxy!> getImageProxy(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class SurfaceCombination {
+    ctor public SurfaceCombination();
+    method public boolean addSurfaceConfig(androidx.camera.core.SurfaceConfig!);
+    method public java.util.List<androidx.camera.core.SurfaceConfig!>! getSurfaceConfigList();
+    method public boolean isSupported(java.util.List<androidx.camera.core.SurfaceConfig!>!);
+    method public boolean removeSurfaceConfig(androidx.camera.core.SurfaceConfig!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class SurfaceConfig {
+    method public static androidx.camera.core.SurfaceConfig! create(androidx.camera.core.SurfaceConfig.ConfigType!, androidx.camera.core.SurfaceConfig.ConfigSize!);
+    method public abstract androidx.camera.core.SurfaceConfig.ConfigSize! getConfigSize();
+    method public abstract androidx.camera.core.SurfaceConfig.ConfigType! getConfigType();
+    method public final boolean isSupported(androidx.camera.core.SurfaceConfig!);
+  }
+
+  public enum SurfaceConfig.ConfigSize {
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize ANALYSIS;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize MAXIMUM;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize NOT_SUPPORT;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize PREVIEW;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigSize RECORD;
+  }
+
+  public enum SurfaceConfig.ConfigType {
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType JPEG;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType PRIV;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType RAW;
+    enum_constant public static final androidx.camera.core.SurfaceConfig.ConfigType YUV;
+  }
+
+  public class SurfaceOrientedMeteringPointFactory extends androidx.camera.core.MeteringPointFactory {
+    ctor public SurfaceOrientedMeteringPointFactory(float, float);
+    ctor public SurfaceOrientedMeteringPointFactory(float, float, androidx.camera.core.UseCase);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected android.graphics.PointF convertPoint(float, float);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public abstract class SurfaceSizeDefinition {
+    method public static androidx.camera.core.SurfaceSizeDefinition! create(android.util.Size!, android.util.Size!, android.util.Size!);
+    method public abstract android.util.Size! getAnalysisSize();
+    method public abstract android.util.Size! getPreviewSize();
+    method public abstract android.util.Size! getRecordSize();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface TargetConfig<T> {
+    method public Class<T!>? getTargetClass(Class<T!>?);
+    method public Class<T!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Class<?>!>! OPTION_TARGET_CLASS;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.String!>! OPTION_TARGET_NAME;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface TargetConfig.Builder<T, B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setTargetClass(Class<T!>);
+    method public B setTargetName(String);
+  }
+
+  public class TorchState {
+    field public static final int OFF = 0; // 0x0
+    field public static final int ON = 1; // 0x1
+  }
+
+  @IntDef({androidx.camera.core.TorchState.OFF, androidx.camera.core.TorchState.ON}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface TorchState.State {
+  }
+
+  public abstract class UseCase {
+    ctor @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected UseCase(androidx.camera.core.UseCaseConfig<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void addStateChangeCallback(androidx.camera.core.UseCase.StateChangeCallback);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.UseCaseConfig<?> applyDefaults(androidx.camera.core.UseCaseConfig<?>, androidx.camera.core.UseCaseConfig.Builder<?,?,?>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final void attachCameraControl(String!, androidx.camera.core.CameraControlInternal!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void attachToCamera(String!, androidx.camera.core.SessionConfig!);
+    method @CallSuper @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void clear();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<java.lang.String!>! getAttachedCameraIds();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size! getAttachedSurfaceResolution(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraInternal? getBoundCamera();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected String getBoundCameraId();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.CameraControlInternal! getCameraControl(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected androidx.camera.core.UseCaseConfig.Builder<?,?,?>? getDefaultBuilder(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getImageFormat();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public String getName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig! getSessionConfig(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCaseConfig<?>! getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected boolean isCurrentlyBoundCamera(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyActive();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyInactive();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyReset();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyState();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void notifyUpdated();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void onBind(androidx.camera.core.CameraInternal);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void onCameraControlReady(String!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void onStateOffline(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void onStateOnline(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected abstract java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void removeStateChangeCallback(androidx.camera.core.UseCase.StateChangeCallback);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected void setImageFormat(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void updateSuggestedResolution(java.util.Map<java.lang.String!,android.util.Size!>!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected final void updateUseCaseConfig(androidx.camera.core.UseCaseConfig<?>);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCase.EventCallback {
+    method public void onBind(String);
+    method public void onUnbind();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCase.StateChangeCallback {
+    method public void onUseCaseActive(androidx.camera.core.UseCase);
+    method public void onUseCaseInactive(androidx.camera.core.UseCase);
+    method public void onUseCaseReset(androidx.camera.core.UseCase);
+    method public void onUseCaseUpdated(androidx.camera.core.UseCase);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class UseCaseAttachState {
+    ctor public UseCaseAttachState(String!);
+    method public androidx.camera.core.SessionConfig.ValidatingBuilder! getActiveAndOnlineBuilder();
+    method public java.util.Collection<androidx.camera.core.UseCase!>! getActiveAndOnlineUseCases();
+    method public androidx.camera.core.SessionConfig.ValidatingBuilder! getOnlineBuilder();
+    method public java.util.Collection<androidx.camera.core.UseCase!>! getOnlineUseCases();
+    method public androidx.camera.core.SessionConfig! getUseCaseSessionConfig(androidx.camera.core.UseCase!);
+    method public boolean isUseCaseOnline(androidx.camera.core.UseCase!);
+    method public void setUseCaseActive(androidx.camera.core.UseCase!);
+    method public void setUseCaseInactive(androidx.camera.core.UseCase!);
+    method public void setUseCaseOffline(androidx.camera.core.UseCase!);
+    method public void setUseCaseOnline(androidx.camera.core.UseCase!);
+    method public void updateUseCase(androidx.camera.core.UseCase!);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseConfig<T extends androidx.camera.core.UseCase> extends androidx.camera.core.TargetConfig<T> androidx.camera.core.Config androidx.camera.core.UseCaseEventConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CaptureConfig.OptionUnpacker!>! OPTION_CAPTURE_CONFIG_UNPACKER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.CaptureConfig!>! OPTION_DEFAULT_CAPTURE_CONFIG;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.SessionConfig!>! OPTION_DEFAULT_SESSION_CONFIG;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.SessionConfig.OptionUnpacker!>! OPTION_SESSION_CONFIG_UNPACKER;
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.lang.Integer!>! OPTION_SURFACE_OCCUPANCY_PRIORITY;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCaseConfig.Builder<T extends androidx.camera.core.UseCase, C extends androidx.camera.core.UseCaseConfig<T>, B> extends androidx.camera.core.TargetConfig.Builder<T,B> androidx.camera.core.ExtendableBuilder<T> androidx.camera.core.UseCaseEventConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public C getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setSurfaceOccupancyPriority(int);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseConfigFactory {
+    method public <C extends androidx.camera.core.UseCaseConfig<?>> C? getConfig(Class<C!>!, Integer?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface UseCaseEventConfig {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<androidx.camera.core.UseCase.EventCallback!>! OPTION_USE_CASE_EVENT_CALLBACK;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static interface UseCaseEventConfig.Builder<B> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public B setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class UseCaseGroup {
+    ctor public UseCaseGroup();
+    method public boolean addUseCase(androidx.camera.core.UseCase!);
+    method public void clear();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class VideoCapture extends androidx.camera.core.UseCase {
+    ctor public VideoCapture(androidx.camera.core.VideoCaptureConfig!);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void clear();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) protected java.util.Map<java.lang.String!,android.util.Size!> onSuggestedResolutionUpdated(java.util.Map<java.lang.String!,android.util.Size!>);
+    method public void setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method public void startRecording(java.io.File, java.util.concurrent.Executor, androidx.camera.core.VideoCapture.OnVideoSavedCallback);
+    method public void startRecording(java.io.File, androidx.camera.core.VideoCapture.Metadata, java.util.concurrent.Executor, androidx.camera.core.VideoCapture.OnVideoSavedCallback);
+    method public void stopRecording();
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.VideoCapture.Defaults! DEFAULT_CONFIG;
+    field public static final int ERROR_ENCODER = 1; // 0x1
+    field public static final int ERROR_MUXER = 2; // 0x2
+    field public static final int ERROR_RECORDING_IN_PROGRESS = 3; // 0x3
+    field public static final int ERROR_UNKNOWN = 0; // 0x0
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final class VideoCapture.Defaults implements androidx.camera.core.ConfigProvider<androidx.camera.core.VideoCaptureConfig> {
+    ctor public VideoCapture.Defaults();
+    method public androidx.camera.core.VideoCaptureConfig! getConfig(Integer?);
+  }
+
+  public static final class VideoCapture.Metadata {
+    ctor public VideoCapture.Metadata();
+    field public android.location.Location? location;
+  }
+
+  public static interface VideoCapture.OnVideoSavedCallback {
+    method public void onError(@androidx.camera.core.VideoCapture.VideoCaptureError int, String, Throwable?);
+    method public void onVideoSaved(java.io.File);
+  }
+
+  @IntDef({androidx.camera.core.VideoCapture.ERROR_UNKNOWN, androidx.camera.core.VideoCapture.ERROR_ENCODER, androidx.camera.core.VideoCapture.ERROR_MUXER, androidx.camera.core.VideoCapture.ERROR_RECORDING_IN_PROGRESS}) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) public static @interface VideoCapture.VideoCaptureError {
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class VideoCaptureConfig implements androidx.camera.core.CameraDeviceConfig androidx.camera.core.ImageOutputConfig androidx.camera.core.UseCaseConfig<androidx.camera.core.VideoCapture> {
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public boolean containsOption(androidx.camera.core.Config.Option<?>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public void findOptions(String, androidx.camera.core.Config.OptionMatcher);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioBitRate();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioChannelCount(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioChannelCount();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioMinBufferSize(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioMinBufferSize();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioRecordSource(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioRecordSource();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioSampleRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getAudioSampleRate();
+    method public java.util.concurrent.Executor? getBackgroundExecutor(java.util.concurrent.Executor?);
+    method public java.util.concurrent.Executor getBackgroundExecutor();
+    method public int getBitRate(int);
+    method public int getBitRate();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter? getCameraIdFilter(androidx.camera.core.CameraIdFilter?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CameraIdFilter getCameraIdFilter();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker? getCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig.OptionUnpacker getCaptureOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig? getDefaultCaptureConfig(androidx.camera.core.CaptureConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.CaptureConfig getDefaultCaptureConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getDefaultResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getDefaultResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig? getDefaultSessionConfig(androidx.camera.core.SessionConfig?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig getDefaultSessionConfig();
+    method public int getIFrameInterval(int);
+    method public int getIFrameInterval();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Integer? getLensFacing(Integer?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @androidx.camera.core.CameraSelector.LensFacing public int getLensFacing();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getMaxResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getMaxResolution();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker? getSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.SessionConfig.OptionUnpacker getSessionOptionUnpacker();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>? getSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!> getSupportedResolutions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public int getSurfaceOccupancyPriority();
+    method @androidx.camera.core.AspectRatio.Ratio public int getTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational? getTargetAspectRatioCustom(android.util.Rational?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Rational getTargetAspectRatioCustom();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.VideoCapture!>? getTargetClass(Class<androidx.camera.core.VideoCapture!>?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public Class<androidx.camera.core.VideoCapture!> getTargetClass();
+    method public String? getTargetName(String?);
+    method public String getTargetName();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size? getTargetResolution(android.util.Size?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public android.util.Size getTargetResolution();
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation(int);
+    method @androidx.camera.core.ImageOutputConfig.RotationValue public int getTargetRotation();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback? getUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback?);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.UseCase.EventCallback getUseCaseEventCallback();
+    method public int getVideoFrameRate(int);
+    method public int getVideoFrameRate();
+    method public boolean hasTargetAspectRatio();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public java.util.Set<androidx.camera.core.Config.Option<?>!> listOptions();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public <ValueT> ValueT? retrieveOption(androidx.camera.core.Config.Option<ValueT!>, ValueT?);
+    field @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public static final androidx.camera.core.Config.Option<java.util.concurrent.Executor!>! OPTION_BACKGROUND_EXECUTOR;
+  }
+
+  public static final class VideoCaptureConfig.Builder implements androidx.camera.core.CameraDeviceConfig.Builder<androidx.camera.core.VideoCaptureConfig.Builder> androidx.camera.core.ImageOutputConfig.Builder<androidx.camera.core.VideoCaptureConfig.Builder> androidx.camera.core.UseCaseConfig.Builder<androidx.camera.core.VideoCapture,androidx.camera.core.VideoCaptureConfig,androidx.camera.core.VideoCaptureConfig.Builder> {
+    ctor public VideoCaptureConfig.Builder();
+    method public androidx.camera.core.VideoCapture build();
+    method public static androidx.camera.core.VideoCaptureConfig.Builder fromConfig(androidx.camera.core.VideoCaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.MutableConfig getMutableConfig();
+    method public androidx.camera.core.VideoCaptureConfig getUseCaseConfig();
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioChannelCount(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioMinBufferSize(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioRecordSource(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setAudioSampleRate(int);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setBackgroundExecutor(java.util.concurrent.Executor);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setBitRate(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setCameraIdFilter(androidx.camera.core.CameraIdFilter);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setCaptureOptionUnpacker(androidx.camera.core.CaptureConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultCaptureConfig(androidx.camera.core.CaptureConfig);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setDefaultSessionConfig(androidx.camera.core.SessionConfig);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setIFrameInterval(int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setLensFacing(@androidx.camera.core.CameraSelector.LensFacing int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setMaxResolution(android.util.Size);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSessionOptionUnpacker(androidx.camera.core.SessionConfig.OptionUnpacker);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSupportedResolutions(java.util.List<android.util.Pair<java.lang.Integer!,android.util.Size![]!>!>);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setSurfaceOccupancyPriority(int);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetAspectRatio(@androidx.camera.core.AspectRatio.Ratio int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetAspectRatioCustom(android.util.Rational);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetClass(Class<androidx.camera.core.VideoCapture!>);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetName(String);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setTargetResolution(android.util.Size);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setTargetRotation(@androidx.camera.core.ImageOutputConfig.RotationValue int);
+    method @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public androidx.camera.core.VideoCaptureConfig.Builder setUseCaseEventCallback(androidx.camera.core.UseCase.EventCallback);
+    method public androidx.camera.core.VideoCaptureConfig.Builder setVideoFrameRate(int);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class LiveDataObservable<T> implements androidx.camera.core.Observable<T> {
+    ctor public LiveDataObservable();
+    method public void addObserver(java.util.concurrent.Executor, androidx.camera.core.Observable.Observer<T!>);
+    method public com.google.common.util.concurrent.ListenableFuture<T!> fetchData();
+    method public androidx.lifecycle.LiveData<androidx.camera.core.impl.LiveDataObservable.Result<T!>!> getLiveData();
+    method public void postError(Throwable);
+    method public void postValue(T?);
+    method public void removeObserver(androidx.camera.core.Observable.Observer<T!>);
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.annotation {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface ExecutedBy {
+    method public abstract String value();
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.utils {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class CameraSelectorUtil {
+    method public static androidx.camera.core.CameraDeviceConfig toCameraDeviceConfig(androidx.camera.core.CameraSelector);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class MainThreadAsyncHandler {
+    method public static android.os.Handler! getInstance();
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public final class Threads {
+    method public static void checkBackgroundThread();
+    method public static void checkMainThread();
+    method public static boolean isBackgroundThread();
+    method public static boolean isMainThread();
+  }
+
+}
+
+package @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) androidx.camera.core.impl.utils.futures {
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) @java.lang.FunctionalInterface public interface AsyncFunction<I, O> {
+    method public com.google.common.util.concurrent.ListenableFuture<O!>! apply(I?) throws java.lang.Exception;
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public interface FutureCallback<V> {
+    method public void onFailure(Throwable!);
+    method public void onSuccess(V?);
+  }
+
+  @RestrictTo(androidx.annotation.RestrictTo.Scope.LIBRARY_GROUP) public class FutureChain<V> implements com.google.common.util.concurrent.ListenableFuture<V> {
+    method public final void addCallback(androidx.camera.core.impl.utils.futures.FutureCallback<? super V>, java.util.concurrent.Executor);
+    method public void addListener(Runnable, java.util.concurrent.Executor);
+    method public boolean cancel(boolean);
+    method public static <V> androidx.camera.core.impl.utils.futures.FutureChain<V!> from(com.google.common.util.concurrent.ListenableFuture<V!>);
+    method public V? get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public V? get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public boolean isCancelled();
+    method public boolean isDone();
+    method public final <T> androidx.camera.core.impl.utils.futures.FutureChain<T!> transform(androidx.arch.core.util.Function<? super V,T!>, java.util.concurrent.Executor);
+    method public final <T> androidx.camera.core.impl.utils.futures.FutureChain<T!> transformAsync(androidx.camera.core.impl.utils.futures.AsyncFunction<? super V,T!>, java.util.concurrent.Executor);
+  }
+
+}
+
diff --git a/camera/camera-core/src/androidTest/java/androidx/camera/core/DeferrableSurfacesTest.java b/camera/camera-core/src/androidTest/java/androidx/camera/core/DeferrableSurfacesTest.java
index e115ec2..b29231c 100644
--- a/camera/camera-core/src/androidTest/java/androidx/camera/core/DeferrableSurfacesTest.java
+++ b/camera/camera-core/src/androidTest/java/androidx/camera/core/DeferrableSurfacesTest.java
@@ -30,6 +30,7 @@
 import androidx.camera.core.impl.utils.futures.Futures;
 import androidx.concurrent.futures.CallbackToFutureAdapter;
 import androidx.test.ext.junit.runners.AndroidJUnit4;
+import androidx.test.filters.MediumTest;
 import androidx.test.filters.SmallTest;
 
 import com.google.common.util.concurrent.ListenableFuture;
@@ -63,6 +64,7 @@
     }
 
     @Test
+    @MediumTest
     public void getSurfaceTimeoutTest() {
         DeferrableSurface fakeDeferrableSurface = new DeferrableSurface() {
             @Override
diff --git a/camera/camera-lifecycle/api/1.0.0-alpha02.txt b/camera/camera-lifecycle/api/1.0.0-alpha02.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/1.0.0-alpha02.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/current.txt b/camera/camera-lifecycle/api/current.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/current.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-alpha02.txt b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-alpha02.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/public_plus_experimental_1.0.0-alpha02.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/public_plus_experimental_current.txt b/camera/camera-lifecycle/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/public_plus_experimental_current.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/res-1.0.0-alpha02.txt b/camera/camera-lifecycle/api/res-1.0.0-alpha02.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/camera/camera-lifecycle/api/res-1.0.0-alpha02.txt
diff --git a/camera/camera-lifecycle/api/restricted_1.0.0-alpha02.txt b/camera/camera-lifecycle/api/restricted_1.0.0-alpha02.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/restricted_1.0.0-alpha02.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/camera/camera-lifecycle/api/restricted_current.txt b/camera/camera-lifecycle/api/restricted_current.txt
new file mode 100644
index 0000000..a6aba27
--- /dev/null
+++ b/camera/camera-lifecycle/api/restricted_current.txt
@@ -0,0 +1,21 @@
+// Signature format: 3.0
+package androidx.camera.lifecycle {
+
+  public interface LifecycleCameraProvider {
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+  public final class ProcessCameraProvider implements androidx.camera.lifecycle.LifecycleCameraProvider {
+    method public androidx.camera.core.Camera bindToLifecycle(androidx.lifecycle.LifecycleOwner, androidx.camera.core.CameraSelector, androidx.camera.core.UseCase!...);
+    method public static com.google.common.util.concurrent.ListenableFuture<androidx.camera.lifecycle.ProcessCameraProvider!> getInstance(android.content.Context);
+    method public boolean hasCamera(androidx.camera.core.CameraSelector) throws androidx.camera.core.CameraInfoUnavailableException;
+    method public boolean isBound(androidx.camera.core.UseCase);
+    method public void unbind(androidx.camera.core.UseCase!...);
+    method public void unbindAll();
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/0.1.0-dev04.txt b/compose/compose-runtime/api/0.1.0-dev04.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/0.1.0-dev04.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/api_lint.ignore b/compose/compose-runtime/api/api_lint.ignore
new file mode 100644
index 0000000..10909e8
--- /dev/null
+++ b/compose/compose-runtime/api/api_lint.ignore
@@ -0,0 +1,83 @@
+// Baseline format: 1.0
+AcronymName: androidx.compose.SlotTable.Companion#getEMPTY():
+    Acronyms should not be capitalized in method names: was `getEMPTY`, should this be `getEmpty`?
+
+
+ArrayReturn: androidx.compose.ComposerKt#remember(androidx.compose.Composer<N>, Object[], kotlin.jvm.functions.Function0<? extends V>) parameter #1:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#key(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#memo(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#modelFor(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#onCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#onPreCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.EffectsKt#stateFor(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.SlotTable#SlotTable(Object[]) parameter #0:
+    Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
+ArrayReturn: androidx.compose.UnionType#types():
+    Method should return Collection<Class> (or subclass) instead of raw array; was `java.lang.Class<?>[]`
+
+
+CallbackName: androidx.compose.CompositionLifecycleObserver:
+    Class should be named CompositionLifecycleCallback
+
+
+ContextFirst: androidx.compose.Compose#composeInto(androidx.compose.Emittable, android.content.Context, androidx.compose.CompositionReference, kotlin.jvm.functions.Function0<kotlin.Unit>) parameter #1:
+    Context is distinct, so it must be the first argument (method `composeInto`)
+ContextFirst: androidx.compose.Compose#disposeComposition(androidx.compose.Emittable, android.content.Context, androidx.compose.CompositionReference) parameter #1:
+    Context is distinct, so it must be the first argument (method `disposeComposition`)
+ContextFirst: androidx.compose.Compose#subcomposeInto(androidx.compose.Emittable, android.content.Context, androidx.compose.CompositionReference, kotlin.jvm.functions.Function0<kotlin.Unit>) parameter #1:
+    Context is distinct, so it must be the first argument (method `subcomposeInto`)
+ContextFirst: androidx.compose.ViewComposer#ViewComposer(Object, android.content.Context, androidx.compose.Recomposer, androidx.compose.ViewAdapters) parameter #1:
+    Context is distinct, so it must be the first argument (method `ViewComposer`)
+
+
+DocumentExceptions: androidx.compose.frames.FramesKt#commit(androidx.compose.frames.Frame):
+    Method FramesKt.commit appears to be throwing java.lang.IllegalStateException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+DocumentExceptions: androidx.compose.frames.FramesKt#currentFrame():
+    Method FramesKt.currentFrame appears to be throwing java.lang.IllegalStateException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+DocumentExceptions: androidx.compose.frames.FramesKt#writable(T, androidx.compose.frames.Framed, androidx.compose.frames.Frame):
+    Method FramesKt.writable appears to be throwing java.lang.IllegalStateException; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+
+
+EqualsAndHashCode: androidx.compose.Ambient#equals(Object):
+    Must override both equals and hashCode; missing one in androidx.compose.Ambient
+
+
+ExceptionName: androidx.compose.frames.FrameAborted:
+    Exceptions must be named `FooException`, was `FrameAborted`
+
+
+KotlinOperator: androidx.compose.ComposerUpdater#set(V, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit>):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.ComposerUpdater#set(int, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit>):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.SlotEditor#get(androidx.compose.Anchor):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.SlotEditor#get(int):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.ViewValidator#set(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.ViewValidator#set(int, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+KotlinOperator: androidx.compose.adapters.ComposeViewAdapter#get(int, kotlin.jvm.functions.Function0<? extends T>):
+    Note that adding the `operator` keyword would allow calling this method using operator syntax
+
+
+MissingNullability: androidx.compose.SlotReader#getGroupKey():
+    Missing nullability on method `getGroupKey` return
+MissingNullability: androidx.compose.ViewComposerKt#getComposer():
+    Missing nullability on method `getComposer` return
+
+
+MutableBareField: androidx.compose.Effect#context:
+    Bare field context must be marked final, or moved behind accessors if mutable
+
+
+RegistrationName: androidx.compose.Choreographer#removeFrameCallback(android.view.Choreographer.FrameCallback):
+    Callback methods should be named register/unregister; was removeFrameCallback
diff --git a/compose/compose-runtime/api/current.txt b/compose/compose-runtime/api/current.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/current.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev04.txt b/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev04.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev04.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/public_plus_experimental_current.txt b/compose/compose-runtime/api/public_plus_experimental_current.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/public_plus_experimental_current.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/res-0.1.0-dev04.txt b/compose/compose-runtime/api/res-0.1.0-dev04.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/compose/compose-runtime/api/res-0.1.0-dev04.txt
diff --git a/compose/compose-runtime/api/restricted_0.1.0-dev04.txt b/compose/compose-runtime/api/restricted_0.1.0-dev04.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/restricted_0.1.0-dev04.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/compose/compose-runtime/api/restricted_current.txt b/compose/compose-runtime/api/restricted_current.txt
new file mode 100644
index 0000000..786046d
--- /dev/null
+++ b/compose/compose-runtime/api/restricted_current.txt
@@ -0,0 +1,703 @@
+// Signature format: 3.0
+package androidx.compose {
+
+  public final class ActualAndroidKt {
+    ctor public ActualAndroidKt();
+    method public static android.content.Context getContext(android.view.View);
+    method public static android.view.ViewParent getParent(android.view.View);
+    method public static boolean isMainThread();
+  }
+
+  public final class ActualJvmKt {
+    ctor public ActualJvmKt();
+    method public static int identityHashCode(Object? instance);
+    method public static inline <R> R! synchronized(Object lock, kotlin.jvm.functions.Function0<? extends R> block);
+  }
+
+  public final class Ambient<T> {
+    method @androidx.compose.Composable public void Provider(T? value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    field public static final androidx.compose.Ambient.Companion! Companion;
+  }
+
+  public static final class Ambient.Companion {
+    method public <T> androidx.compose.Ambient<T> of(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+  }
+
+  public final class Anchor {
+    ctor public Anchor(internal int loc);
+    method public boolean getValid();
+    method public int location(androidx.compose.SlotTable slots);
+    property public final boolean valid;
+  }
+
+  public final class Applier<N> {
+    ctor public Applier(N! root, androidx.compose.ApplyAdapter<N> adapter);
+    method public void down(N? node);
+    method public N! getCurrent();
+    method public void insert(int index, N? instance);
+    method public void move(int from, int to, int count);
+    method public void remove(int index, int count);
+    method public void reset();
+    method public void up();
+    property public final N! current;
+  }
+
+  public interface ApplyAdapter<N> {
+    method public void end(N?, N? instance, N? parent);
+    method public void insertAt(N?, int index, N? instance);
+    method public void move(N?, int from, int to, int count);
+    method public void removeAt(N?, int index, int count);
+    method public void start(N?, N? instance);
+  }
+
+  public final class Choreographer {
+    method public void postFrameCallback(android.view.Choreographer.FrameCallback callback);
+    method public void postFrameCallbackDelayed(long delayMillis, android.view.Choreographer.FrameCallback callback);
+    method public void removeFrameCallback(android.view.Choreographer.FrameCallback callback);
+    field public static final androidx.compose.Choreographer! INSTANCE;
+  }
+
+  @androidx.compose.EffectsDsl public interface CommitScope {
+    method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+  }
+
+  public abstract class Component {
+    ctor public Component();
+    method @androidx.compose.Composable public abstract void compose();
+    method protected final void recompose();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.PROPERTY}) public @interface Composable {
+  }
+
+  public final class Compose {
+    method @MainThread public androidx.compose.CompositionContext? composeInto(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public androidx.compose.CompositionContext composeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public void disposeComposition(android.view.ViewGroup container, androidx.compose.CompositionReference? parent = null);
+    method @MainThread public void disposeComposition(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null);
+    method public androidx.compose.Component? findRoot(android.view.View view);
+    method @MainThread public androidx.compose.CompositionContext subcomposeInto(androidx.compose.Emittable container, android.content.Context context, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    field public static final androidx.compose.Compose! INSTANCE;
+  }
+
+  public final class ComposeAndroidKt {
+    ctor public ComposeAndroidKt();
+    method public static void disposeComposition(android.app.Activity);
+    method public static androidx.compose.CompositionContext? setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public final class ComposeKt {
+    ctor public ComposeKt();
+    method public static void disposeComposition(android.view.ViewGroup);
+    method public static androidx.compose.CompositionContext? setViewContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+  }
+
+  public class Composer<N> {
+    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
+    method public final <V, T> void apply(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public final void applyChanges();
+    method public final androidx.compose.CompositionReference buildReference();
+    method public final <T> boolean changed(T? value);
+    method public final void collectKeySourceInformation();
+    method protected final void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public final <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void doneJoin(boolean valid);
+    method public final <T extends N> void emitNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method public final void emitNode(N? node);
+    method public final void endGroup();
+    method public final void endNode();
+    method public final androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public final void endRoot();
+    method public final int getChangeCount();
+    method public final boolean getInserting();
+    method public final androidx.compose.SlotTable getSlotTable();
+    method public final Object joinKey(Object? left, Object? right);
+    method public final Object? nextSlot();
+    method public final boolean recompose();
+    method public final void skipCurrentGroup();
+    method public final void skipValue();
+    method public final void startGroup(Object key);
+    method public final kotlin.jvm.functions.Function1<java.lang.Boolean,kotlin.Unit> startJoin(Object key, boolean valid, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> compose);
+    method public final void startNode(Object key);
+    method public final void startRestartGroup(Object key);
+    method public final void startRoot();
+    method public final void updateValue(Object? value);
+    method public final N! useNode();
+    property public final int changeCount;
+    property public final boolean inserting;
+  }
+
+  public final class ComposerKt {
+    ctor public ComposerKt();
+    method public static inline <N, T> T! cache(androidx.compose.Composer<N>, boolean valid = true, kotlin.jvm.functions.Function0<? extends T> block);
+    method public static inline <T> T! escapeCompose(kotlin.jvm.functions.Function1<? super androidx.compose.NullCompilationScope,? extends T> block);
+    method public static <N> Object? nextValue(androidx.compose.Composer<N>);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1> V! remember(androidx.compose.Composer<N>, P1? p1, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V, P1, P2, P3, P4> V! remember(androidx.compose.Composer<N>, P1? p1, P2? p2, P3? p3, P4? p4, kotlin.jvm.functions.Function0<? extends V> block);
+    method public static <N, V> V! remember(androidx.compose.Composer<N>, Object![]? args, kotlin.jvm.functions.Function0<? extends V> block);
+    field public static final int DEFAULT_SLOT_ACTIONS_SIZE = 16; // 0x10
+    field public static final int DEFAULT_SLOT_KEYS_SIZE = 8; // 0x8
+  }
+
+  public final class ComposerUpdater<N, T extends N> {
+    ctor public ComposerUpdater(androidx.compose.Composer<N> composer, T! node);
+    method public androidx.compose.Composer<N> getComposer();
+    method public T! getNode();
+    method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void set(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+    method public inline void update(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified V> void update(V? value, kotlin.jvm.functions.Function2<? super T,? super V,kotlin.Unit> block);
+  }
+
+  public final class CompositionContext {
+    method public void compose();
+    method public androidx.compose.Component getComponent();
+    method public androidx.compose.Composer<?> getComposer();
+    method public boolean recomposeSync();
+    field public static final androidx.compose.CompositionContext.Companion! Companion;
+  }
+
+  public static final class CompositionContext.Companion {
+    method public androidx.compose.CompositionContext prepare(android.content.Context context, Object root, androidx.compose.Component component, androidx.compose.CompositionReference? compositionReference);
+    method public androidx.compose.CompositionContext prepare(androidx.compose.Component component, androidx.compose.CompositionReference? ambientReference, kotlin.jvm.functions.Function1<? super androidx.compose.Recomposer,? extends androidx.compose.Composer<?>> makeComposer);
+  }
+
+  public interface CompositionLifecycleObserver {
+    method public void onEnter();
+    method public void onLeave();
+  }
+
+  public interface CompositionReference {
+    method public <T> T! getAmbient(androidx.compose.Ambient<T> key);
+    method public void invalidate(boolean sync);
+    method public <T> void invalidateConsumers(androidx.compose.Ambient<T> key);
+    method public <N> void registerComposer(androidx.compose.Composer<N> composer);
+  }
+
+  @androidx.compose.EffectsDsl public final class Effect<T> {
+    method @androidx.compose.annotations.Hide public Object constructKey(int key);
+    method public androidx.compose.Composer<?> getContext();
+    method @androidx.compose.annotations.Hide public T! resolve(androidx.compose.Composer<?> composerContext, int key = sourceLocation());
+    method public void setContext(androidx.compose.Composer<?> p);
+    method public operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+    property public final androidx.compose.Composer<?> context;
+    field @androidx.compose.annotations.Hide public androidx.compose.Composer<?> context;
+  }
+
+  @kotlin.DslMarker public @interface EffectsDsl {
+  }
+
+  public final class EffectsKt {
+    ctor public EffectsKt();
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> ambient(androidx.compose.Ambient<T> key);
+    method public static androidx.compose.Effect<androidx.compose.CompositionReference> compositionReference();
+    method public static <T> androidx.compose.Effect<T> effectOf(kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method public static androidx.compose.Effect<kotlin.jvm.functions.Function0<kotlin.Unit>> getInvalidate();
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> key(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> key(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> key(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.Effect<T>,? extends T> block);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> memo(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> memo(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> memo(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> model(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<T> modelFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<T> modelFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<T> modelFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <V1, V2> androidx.compose.Effect<kotlin.Unit> onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static androidx.compose.Effect<kotlin.Unit> onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> state(kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T, V1, V2> androidx.compose.Effect<androidx.compose.State<T>> stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method @CheckResult(suggest="+") public static <T> androidx.compose.Effect<androidx.compose.State<T>> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static operator <T> T! unaryPlus(androidx.compose.Effect<T>);
+  }
+
+  public interface Emittable {
+    method public void emitInsertAt(int index, androidx.compose.Emittable instance);
+    method public void emitMove(int from, int to, int count);
+    method public void emitRemoveAt(int index, int count);
+  }
+
+  public final class ExpectKt {
+    ctor public ExpectKt();
+    method public static <T> androidx.compose.ThreadLocal<T> ThreadLocal();
+  }
+
+  public final class FrameManager {
+    method public void ensureStarted();
+    method public <T> T! framed(kotlin.jvm.functions.Function0<? extends T> block);
+    method public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
+    method public void nextFrame();
+    method public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
+    field public static final androidx.compose.FrameManager! INSTANCE;
+  }
+
+  public final class Handler {
+    ctor public Handler(android.os.Looper looper);
+    method public android.os.Handler getHandler();
+    method public boolean postAtFrontOfQueue(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    property public final android.os.Handler handler;
+  }
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface HiddenAttribute {
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  }
+
+  public final class JoinedKeyKt {
+    ctor public JoinedKeyKt();
+    method public static boolean isJoinedKey(Object? key);
+    method public static Object? joinedKeyLeft(Object? key);
+    method public static Object? joinedKeyRight(Object? key);
+  }
+
+  public final class KeyInfo {
+    ctor public KeyInfo(Object key, int location, int nodes, int index);
+    method public int getIndex();
+    method public Object getKey();
+    method public int getLocation();
+    method public int getNodes();
+  }
+
+  public final class KeyKt {
+    ctor public KeyKt();
+    method @androidx.compose.Composable public static void Key(@androidx.compose.Pivotal Object? key, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+  }
+
+  public final class KeySourceInfoKt {
+    ctor public KeySourceInfoKt();
+    method public static String? keySourceInfoOf(Object key);
+  }
+
+  public final class LooperWrapper {
+    method public android.os.Looper getMainLooper();
+    field public static final androidx.compose.LooperWrapper! INSTANCE;
+  }
+
+  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Model {
+  }
+
+  public final class NullCompilationScope {
+    method public kotlin.Unit getComposer();
+    property public final kotlin.Unit composer;
+    field public static final androidx.compose.NullCompilationScope! INSTANCE;
+  }
+
+  public final class ObserveKt {
+    ctor public ObserveKt();
+    method @androidx.compose.Composable public static void Observe(kotlin.jvm.functions.Function0<kotlin.Unit> body);
+  }
+
+  public final class ObserverMap<K, V> {
+    ctor public ObserverMap();
+    method public void add(K key, V value);
+    method public void clear();
+    method public void clearValues(kotlin.jvm.functions.Function1<? super V,java.lang.Boolean> predicate);
+    method public boolean contains(K key, V value);
+    method public operator java.util.List<V> get(Iterable<? extends K> keys);
+    method public java.util.List<V> remove(K key);
+    method public void remove(K key, V value);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Target(allowedTargets={AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public @interface Pivotal {
+  }
+
+  public final class RecomposeKt {
+    ctor public RecomposeKt();
+    method @androidx.compose.Composable public static void Recompose(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> body);
+  }
+
+  public abstract class Recomposer {
+    ctor public Recomposer();
+    method protected final void dispatchRecomposes();
+    method public abstract void recomposeSync();
+    method protected abstract void scheduleChangesDispatch();
+    field public static final androidx.compose.Recomposer.Companion! Companion;
+  }
+
+  public static final class Recomposer.Companion {
+    method public androidx.compose.Recomposer current();
+    method public boolean hasPendingChanges();
+  }
+
+  public final class RecomposerKt {
+    ctor public RecomposerKt();
+  }
+
+  public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+  }
+
+  public class SlotEditor {
+    method public final Object? get(androidx.compose.Anchor anchor);
+    method public final Object? get(int index);
+    method public final int getCurrent();
+    method public final int getGroupSize();
+    method public final int getNodeIndex();
+    method public final int getParentIndex();
+    method public final int getParentNodes();
+    method public final androidx.compose.SlotTable getTable();
+    method public final int groupSize(int index);
+    method public final boolean isGroup();
+    method public final boolean isGroup(int index);
+    method public final boolean isNode();
+    method public final void setCurrent(int p);
+    property public final int current;
+    property public final int groupSize;
+    property public final boolean isGroup;
+    property public final boolean isNode;
+    property public final int nodeIndex;
+    property public final int parentIndex;
+    property public final int parentNodes;
+  }
+
+  public final class SlotReader extends androidx.compose.SlotEditor {
+    method public void beginEmpty();
+    method public void close();
+    method public void endEmpty();
+    method public int endGroup();
+    method public int endNode();
+    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
+    method public Object? get();
+    method public Object! getGroupKey();
+    method public boolean getInEmpty();
+    method public Object groupKey(int index);
+    method public boolean isGroupEnd();
+    method public Object? next();
+    method public void previous();
+    method public void reportUncertainNodeCount();
+    method public int skipEnclosingGroup();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    property public final Object! groupKey;
+    property public final boolean inEmpty;
+    property public final boolean isGroupEnd;
+  }
+
+  public final class SlotTable {
+    ctor public SlotTable(internal Object![] slots);
+    ctor public SlotTable();
+    method public int getSize();
+    method public androidx.compose.SlotReader openReader();
+    method public androidx.compose.SlotWriter openWriter();
+    method public <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
+    method public <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    property public final int size;
+    field public static final androidx.compose.SlotTable.Companion! Companion;
+  }
+
+  public static final class SlotTable.Companion {
+    method public Object getEMPTY();
+    property public final Object EMPTY;
+  }
+
+  public final class SlotTableKt {
+    ctor public SlotTableKt();
+  }
+
+  public final class SlotWriter extends androidx.compose.SlotEditor {
+    method public androidx.compose.Anchor anchor(int index = current);
+    method public void beginInsert();
+    method public void close();
+    method public int endGroup();
+    method public void endInsert();
+    method public int endNode();
+    method public java.util.Iterator<java.lang.Object> groupSlots();
+    method public void moveGroup(int offset);
+    method public void previous();
+    method public boolean removeGroup();
+    method public void set(Object? value);
+    method public Object? skip();
+    method public int skipGroup();
+    method public int skipNode();
+    method public void startGroup(Object key);
+    method public void startNode(Object key);
+    method public Object? update(Object? value);
+  }
+
+  public final class SourceLocationKt {
+    ctor public SourceLocationKt();
+    method public static inline int sourceLocation();
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
+  }
+
+  @androidx.compose.Model public final class State<T> implements androidx.compose.frames.Framed {
+    method public operator T! component1();
+    method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public T! getValue();
+    method public operator T! getValue(Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method @androidx.compose.annotations.Hide public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public void setValue(T? value);
+    method public operator void setValue(Object? thisObj, kotlin.reflect.KProperty<?> property, T? next);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public final T! value;
+  }
+
+  public class ThreadLocal<T> extends java.lang.ThreadLocal<T> {
+    ctor public ThreadLocal(kotlin.jvm.functions.Function0<? extends T> initialValue);
+  }
+
+  public final class Trace {
+    method public void beginSection(String name);
+    method public void endSection();
+    field public static final androidx.compose.Trace! INSTANCE;
+  }
+
+  public final class TraceKt {
+    ctor public TraceKt();
+    method public static inline <T> T! trace(String sectionName, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+    method public abstract Class<?>[] types();
+  }
+
+  public final class ViewAdapters {
+    ctor public ViewAdapters();
+    method public Object? adapt(Object parent, Object child);
+    method public boolean register(kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+  }
+
+  public final class ViewComposer extends androidx.compose.Composer<java.lang.Object> {
+    ctor public ViewComposer(Object root, android.content.Context context, androidx.compose.Recomposer recomposer, androidx.compose.ViewAdapters? adapters);
+    method public androidx.compose.ViewAdapters? getAdapters();
+    method public android.content.Context getContext();
+    method public Object getRoot();
+  }
+
+  public final class ViewComposerCommonKt {
+    ctor public ViewComposerCommonKt();
+  }
+
+  public final class ViewComposerKt {
+    ctor public ViewComposerKt();
+    method public static androidx.compose.ViewComposition! getComposer();
+    method public static Boolean? registerAdapter(androidx.compose.ViewComposition, kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,?> adapter);
+    method public static <T> T! runWithCurrent(androidx.compose.Composer<?>, kotlin.jvm.functions.Function0<? extends T> block);
+  }
+
+  @androidx.compose.EffectsDsl public final class ViewComposition {
+    ctor public ViewComposition(androidx.compose.ViewComposer composer);
+    method public inline void call(Object key, kotlin.jvm.functions.Function1<? super androidx.compose.ViewValidator,java.lang.Boolean> invalid, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public inline <T> void call(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function2<? super androidx.compose.ViewValidator,? super T,java.lang.Boolean> invalid, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T extends android.view.View> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends android.view.ViewGroup> void emit(Object key, kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update);
+    method public inline <T extends androidx.compose.Emittable> void emit(Object key, kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.ComposerUpdater<java.lang.Object,T>,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public androidx.compose.ScopeUpdateScope? endRestartGroup();
+    method public inline <T> T! expr(Object key, kotlin.jvm.functions.Function0<? extends T> block);
+    method public androidx.compose.ViewComposer getComposer();
+    method public inline Object joinKey(Object left, Object? right);
+    method public void observe(Object key, kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit>,kotlin.Unit> block);
+    method public void startRestartGroup(Object key);
+    method public inline operator <V> V! unaryPlus(androidx.compose.Effect<V>);
+  }
+
+  public final class ViewValidator {
+    ctor public ViewValidator(androidx.compose.Composer<?> composer);
+    method public boolean changed(int value);
+    method public <T> boolean changed(T? value);
+    method public <T> boolean changedUnchecked(T? value);
+    method public androidx.compose.Composer<?> getComposer();
+    method public operator boolean plus(boolean, boolean other);
+    method public inline boolean set(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean set(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean setUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline boolean update(int value, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> block);
+    method public inline <reified T> boolean update(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public inline <T> boolean updateUnchecked(T? value, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method public boolean updated(int value);
+    method public <T> boolean updated(T? value);
+  }
+
+}
+
+package androidx.compose.adapters {
+
+  public final class ComposeViewAdapter implements androidx.compose.adapters.ViewAdapter {
+    ctor public ComposeViewAdapter();
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public inline <T extends androidx.compose.adapters.ViewAdapter> T get(int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public java.util.List<androidx.compose.adapters.ViewAdapter> getAdapters();
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public final java.util.List<androidx.compose.adapters.ViewAdapter> adapters;
+    property public int id;
+  }
+
+  public interface ViewAdapter {
+    method public void didInsert(android.view.View view, android.view.ViewGroup parent);
+    method public void didUpdate(android.view.View view, android.view.ViewGroup parent);
+    method public int getId();
+    method public void willInsert(android.view.View view, android.view.ViewGroup parent);
+    property public abstract int id;
+  }
+
+  public final class ViewAdapterKt {
+    ctor public ViewAdapterKt();
+    method public static inline <T extends androidx.compose.adapters.ViewAdapter> T getOrAddAdapter(android.view.View, int id, kotlin.jvm.functions.Function0<? extends T> factory);
+    method public static androidx.compose.adapters.ComposeViewAdapter getViewAdapter(android.view.View);
+  }
+
+}
+
+package androidx.compose.annotations {
+
+  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Hide {
+  }
+
+}
+
+package androidx.compose.frames {
+
+  public abstract class AbstractRecord implements androidx.compose.frames.Record {
+    ctor public AbstractRecord();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public int frameId;
+    property public androidx.compose.frames.Record? next;
+  }
+
+  public final class Frame {
+    method public int getId();
+    method public boolean getReadonly();
+    method public boolean hasPendingChanges();
+    property public final boolean readonly;
+  }
+
+  public final class FrameAborted extends java.lang.RuntimeException {
+    ctor public FrameAborted(androidx.compose.frames.Frame frame);
+    method public androidx.compose.frames.Frame getFrame();
+  }
+
+  public final class FrameContainersKt {
+    ctor public FrameContainersKt();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf();
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
+    method public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
+    method public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+  }
+
+  public final class FrameIdSetKt {
+    ctor public FrameIdSetKt();
+  }
+
+  public interface Framed {
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    property public abstract androidx.compose.frames.Record firstFrameRecord;
+  }
+
+  public final class FramesKt {
+    ctor public FramesKt();
+    method public static kotlin.Unit? _created(androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method public static void abort();
+    method public static void abort(androidx.compose.frames.Frame frame);
+    method public static void abortHandler();
+    method public static void abortHandler(androidx.compose.frames.Frame frame);
+    method public static void commit();
+    method public static void commit(androidx.compose.frames.Frame frame);
+    method public static kotlin.Unit? commitHandler();
+    method public static androidx.compose.frames.Frame currentFrame();
+    method public static boolean getInFrame();
+    method public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method public static androidx.compose.frames.Frame open(boolean readOnly = false);
+    method public static androidx.compose.frames.Frame open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
+    method public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function1<? super java.util.Set<?>,kotlin.Unit> observer);
+    method public static void restore(androidx.compose.frames.Frame frame);
+    method public static androidx.compose.frames.Frame suspend();
+    method public static boolean wasModified(Object value);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
+    method public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+  }
+
+  public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+    ctor public ModelList();
+    method public boolean add(T? element);
+    method public void add(int index, T? element);
+    method public boolean addAll(int index, java.util.Collection<? extends T> elements);
+    method public boolean addAll(java.util.Collection<? extends T> elements);
+    method public void clear();
+    method public boolean contains(Object? element);
+    method public boolean containsAll(java.util.Collection<?> elements);
+    method public T! get(int index);
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public int getSize();
+    method public int indexOf(Object? element);
+    method public boolean isEmpty();
+    method public java.util.Iterator<T> iterator();
+    method public int lastIndexOf(Object? element);
+    method public java.util.ListIterator<T> listIterator();
+    method public java.util.ListIterator<T> listIterator(int index);
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public boolean remove(Object? element);
+    method public boolean removeAll(java.util.Collection<?> elements);
+    method public T! removeAt(int index);
+    method public boolean retainAll(java.util.Collection<?> elements);
+    method public T! set(int index, T? element);
+    method public java.util.List<T> subList(int fromIndex, int toIndex);
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public int size;
+  }
+
+  public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+    ctor public ModelMap();
+    method public void clear();
+    method public boolean containsKey(Object? key);
+    method public boolean containsValue(Object? value);
+    method public V? get(Object? key);
+    method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
+    method public androidx.compose.frames.Record getFirstFrameRecord();
+    method public java.util.Set<K> getKeys();
+    method public int getSize();
+    method public java.util.Collection<V> getValues();
+    method public boolean isEmpty();
+    method public void prependFrameRecord(androidx.compose.frames.Record value);
+    method public V? put(K? key, V? value);
+    method public void putAll(java.util.Map<? extends K,? extends V> from);
+    method public V? remove(Object? key);
+    property public java.util.Set<java.util.Map.Entry<K,V>> entries;
+    property public androidx.compose.frames.Record firstFrameRecord;
+    property public java.util.Set<K> keys;
+    property public int size;
+    property public java.util.Collection<V> values;
+  }
+
+  public interface Record {
+    method public void assign(androidx.compose.frames.Record value);
+    method public androidx.compose.frames.Record create();
+    method public int getFrameId();
+    method public androidx.compose.frames.Record? getNext();
+    method public void setFrameId(int p);
+    method public void setNext(androidx.compose.frames.Record? p);
+    property public abstract int frameId;
+    property public abstract androidx.compose.frames.Record? next;
+  }
+
+}
+
diff --git a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateTestCase.java b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateTestCase.java
index d803f53..eefd127 100644
--- a/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateTestCase.java
+++ b/core/core/src/androidTest/java/androidx/core/app/ActivityCompatRecreateTestCase.java
@@ -49,7 +49,7 @@
         final TestActivityWithLifecycle firstActivity = mActivityTestRule.getActivity();
 
         // Wait and assert that the Activity is resumed
-        waitUntilState(firstActivity, mActivityTestRule, Lifecycle.State.RESUMED);
+        waitUntilState(firstActivity, Lifecycle.State.RESUMED);
 
         // Now recreate() the activity
         mActivityTestRule.runOnUiThread(new Runnable() {
@@ -59,7 +59,7 @@
             }
         });
         // Wait until the original activity is destroyed
-        waitUntilState(firstActivity, mActivityTestRule, Lifecycle.State.DESTROYED);
+        waitUntilState(firstActivity, Lifecycle.State.DESTROYED);
 
         // Assert that the recreated Activity is resumed
         final TestActivityWithLifecycle newActivity = mActivityTestRule.getActivity();
@@ -73,7 +73,7 @@
         final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
 
         // Assert that the activity is resumed currently
-        waitUntilState(firstActivity, mActivityTestRule, Lifecycle.State.RESUMED);
+        waitUntilState(firstActivity, Lifecycle.State.RESUMED);
 
         // Start a new Activity, so that the first Activity goes into the background
         final Intent intent = new Intent(firstActivity, TestActivityWithLifecycle.class);
@@ -82,8 +82,8 @@
                 (TestActivityWithLifecycle) instrumentation.startActivitySync(intent);
 
         // Now wait until the new activity is resumed, and the original activity is stopped
-        waitUntilState(fgActivity, mActivityTestRule, Lifecycle.State.RESUMED);
-        waitUntilState(firstActivity, mActivityTestRule, Lifecycle.State.CREATED);
+        waitUntilState(fgActivity, Lifecycle.State.RESUMED);
+        waitUntilState(firstActivity, Lifecycle.State.CREATED);
 
         // Now recreate() the stopped activity
         mActivityTestRule.runOnUiThread(new Runnable() {
@@ -95,17 +95,17 @@
 
         // Wait and assert that the original activity in the background is destroyed
         // (since it is being recreated)
-        waitUntilState(firstActivity, mActivityTestRule, Lifecycle.State.DESTROYED);
+        waitUntilState(firstActivity, Lifecycle.State.DESTROYED);
 
         // Now finish the foreground activity and wait until it is destroyed,
         // allowing the recreated activity to come to the foreground
         fgActivity.finish();
-        waitUntilState(fgActivity, mActivityTestRule, Lifecycle.State.DESTROYED);
+        waitUntilState(fgActivity, Lifecycle.State.DESTROYED);
 
         // Assert that the activity was recreated and is resumed
         final TestActivityWithLifecycle recreatedActivity = mActivityTestRule.getActivity();
         assertNotSame(firstActivity, recreatedActivity);
         // Assert that the recreated Activity is resumed
-        waitUntilState(recreatedActivity, mActivityTestRule, Lifecycle.State.RESUMED);
+        waitUntilState(recreatedActivity, Lifecycle.State.RESUMED);
     }
 }
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
index a6428fb..89852add 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentLayoutInflaterFactory.java
@@ -93,6 +93,7 @@
                     + Integer.toHexString(id) + " fname=" + fname
                     + " existing=" + fragment);
         }
+        FragmentStateManager fragmentStateManager;
         if (fragment == null) {
             fragment = mFragmentManager.getFragmentFactory().instantiate(
                     context.getClassLoader(), fname);
@@ -105,8 +106,8 @@
             fragment.mHost = mFragmentManager.getHost();
             fragment.onInflate(mFragmentManager.getHost().getContext(), attrs,
                     fragment.mSavedFragmentState);
+            fragmentStateManager = mFragmentManager.createOrGetFragmentStateManager(fragment);
             mFragmentManager.addFragment(fragment);
-            mFragmentManager.moveToState(fragment);
 
         } else if (fragment.mInLayout) {
             // A fragment already exists and it is not one we restored from
@@ -124,17 +125,14 @@
             // Give the Fragment the attributes to initialize itself.
             fragment.onInflate(mFragmentManager.getHost().getContext(), attrs,
                     fragment.mSavedFragmentState);
+            fragmentStateManager = mFragmentManager.createOrGetFragmentStateManager(fragment);
         }
 
-        // If we haven't finished entering the CREATED state ourselves yet,
-        // push the inflated child fragment along. This will ensureInflatedFragmentView
-        // at the right phase of the lifecycle so that we will have mView populated
-        // for compliant fragments below.
-        if (mFragmentManager.mCurState < Fragment.CREATED && fragment.mFromLayout) {
-            mFragmentManager.moveToState(fragment, Fragment.CREATED);
-        } else {
-            mFragmentManager.moveToState(fragment);
-        }
+        // The <fragment> tag is the one case where we:
+        // 1) Move the Fragment to CREATED even if the FragmentManager isn't yet CREATED
+        fragmentStateManager.moveToExpectedState();
+        // 2) Create the Fragment's view despite not always moving to ACTIVITY_CREATED
+        fragmentStateManager.ensureInflatedView();
 
         if (fragment.mView == null) {
             throw new IllegalStateException("Fragment " + fname
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
index 50528b3..00189f5 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/FragmentStateManager.java
@@ -218,7 +218,6 @@
     void moveToExpectedState() {
         int newState;
         while ((newState = computeExpectedState()) != mFragment.mState) {
-            // TODO call ensureInflatedView()
             if (newState > mFragment.mState) {
                 // Moving upward
                 int nextStep = mFragment.mState + 1;
@@ -231,6 +230,7 @@
                         create();
                         break;
                     case Fragment.ACTIVITY_CREATED:
+                        ensureInflatedView();
                         createView();
                         activityCreated();
                         restoreViewState();
diff --git a/gradlew b/gradlew
index 395fc82..6233fe3 100755
--- a/gradlew
+++ b/gradlew
@@ -12,6 +12,7 @@
     mkdir -p "$OUT_DIR"
     OUT_DIR="$(cd $OUT_DIR && pwd)"
     export GRADLE_USER_HOME="$OUT_DIR/.gradle"
+    export TMPDIR=$OUT_DIR
 else
     SCRIPT_PATH="$(cd $(dirname $0) && pwd)"
     CHECKOUT_ROOT="$(cd $SCRIPT_PATH/../.. && pwd)"
@@ -205,8 +206,11 @@
 if [ "$GRADLE_USER_HOME" != "" ]; then
     HOME_SYSTEM_PROPERTY_ARGUMENT="-Duser.home=$GRADLE_USER_HOME"
 fi
+if [ "$TMPDIR" != "" ]; then
+  TMPDIR_ARG="-Djava.io.tmpdir=$TMPDIR"
+fi
 
-if "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT "$@"; then
+if "$JAVACMD" "${JVM_OPTS[@]}" $TMPDIR_ARG -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain $HOME_SYSTEM_PROPERTY_ARGUMENT $TMPDIR_ARG "$@"; then
   exit 0
 else
   # Print AndroidX-specific help message if build fails
diff --git a/testutils/testutils-runtime/src/main/java/androidx/testutils/LifecycleOwnerUtils.java b/testutils/testutils-runtime/src/main/java/androidx/testutils/LifecycleOwnerUtils.java
index 4acd19e..2653e7d 100644
--- a/testutils/testutils-runtime/src/main/java/androidx/testutils/LifecycleOwnerUtils.java
+++ b/testutils/testutils-runtime/src/main/java/androidx/testutils/LifecycleOwnerUtils.java
@@ -46,26 +46,19 @@
     };
 
     /**
-     * Waits until the the Activity current held the ActivityTestRule has the specified
-     * {@link androidx.lifecycle.Lifecycle.State}. If the owner has not hit that state within a
-     * suitable time period, it asserts that the current state equals the given state.
-     */
-    public static <T extends Activity & LifecycleOwner> void waitUntilState(
-            final @NonNull ActivityTestRule<T> activityRule,
-            final @NonNull Lifecycle.State state) throws Throwable {
-        waitUntilState(activityRule.getActivity(), activityRule, state);
-    }
-
-    /**
      * Waits until the given {@link LifecycleOwner} has the specified
      * {@link androidx.lifecycle.Lifecycle.State}. If the owner has not hit that state within a
      * suitable time period, it asserts that the current state equals the given state.
      */
     public static void waitUntilState(final @NonNull LifecycleOwner owner,
-            final @NonNull ActivityTestRule<?> activityRule,
             final @NonNull Lifecycle.State state) throws Throwable {
+        final Lifecycle.State currentState = owner.getLifecycle().getCurrentState();
+        if (currentState == state) {
+            return;
+        }
+
         final CountDownLatch latch = new CountDownLatch(1);
-        activityRule.runOnUiThread(new Runnable() {
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
             @Override
             public void run() {
                 final Lifecycle.State currentState = owner.getLifecycle().getCurrentState();
@@ -78,14 +71,14 @@
                     public void onStateChanged(@NonNull LifecycleOwner provider,
                             @NonNull Lifecycle.Event event) {
                         if (provider.getLifecycle().getCurrentState() == state) {
-                            latch.countDown();
                             provider.getLifecycle().removeObserver(this);
+                            latch.countDown();
                         }
                     }
                 });
             }
         });
-        final boolean latchResult = latch.await(30, TimeUnit.SECONDS);
+        final boolean latchResult = latch.await(15, TimeUnit.SECONDS);
 
         assertThat("Expected " + state + " never happened to " + owner
                         + ". Current state:" + owner.getLifecycle().getCurrentState(),
@@ -93,19 +86,29 @@
                 is(true));
 
         // wait for another loop to ensure all observers are called
-        activityRule.runOnUiThread(DO_NOTHING);
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(DO_NOTHING);
     }
 
     /**
      * Waits until the given the current {@link Activity} has been recreated, and
      * the new instance is resumed.
      */
-    @SuppressWarnings("unchecked")
     @NonNull
     public static <T extends Activity & LifecycleOwner> T waitForRecreation(
             @NonNull final ActivityTestRule<T> activityRule
     ) throws Throwable {
-        return waitForRecreation(activityRule.getActivity(), activityRule, null);
+        return waitForRecreation(activityRule.getActivity());
+    }
+
+    /**
+     * Waits until the given the given {@link Activity} has been recreated, and
+     * the new instance is resumed.
+     */
+    @NonNull
+    public static <T extends Activity & LifecycleOwner> T waitForRecreation(
+            @NonNull final T activity
+    ) throws Throwable {
+        return waitForRecreation(activity, null);
     }
 
     /**
@@ -116,39 +119,42 @@
     @NonNull
     public static <T extends Activity & LifecycleOwner> T waitForRecreation(
             @NonNull final T activity,
-            @NonNull final ActivityTestRule<?> activityRule,
             @Nullable final Runnable actionOnUiThread
     ) throws Throwable {
-        Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
-                activity.getClass().getCanonicalName(), null, false);
+        final Instrumentation.ActivityMonitor monitor = new Instrumentation.ActivityMonitor(
+                activity.getClass().getName(), null, false);
         Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
         instrumentation.addMonitor(monitor);
 
         if (actionOnUiThread != null) {
-            activityRule.runOnUiThread(actionOnUiThread);
+            instrumentation.runOnMainSync(actionOnUiThread);
         }
 
         T result;
 
         // this guarantee that we will reinstall monitor between notifications about onDestroy
         // and onCreate
-        //noinspection SynchronizationOnLocalVariableOrMethodParameter
-        synchronized (monitor) {
-            do {
-                // The documentation says "Block until an Activity is created
-                // that matches this monitor." This statement is true, but there are some other
-                // true statements like: "Block until an Activity is destroyed" or
-                // "Block until an Activity is resumed"...
-                // this call will release synchronization monitor's monitor
-                result = (T) monitor.waitForActivityWithTimeout(TIMEOUT_MS);
-                if (result == null) {
-                    throw new RuntimeException("Timeout. Activity was not recreated.");
-                }
-            } while (result == activity);
+        // noinspection SynchronizationOnLocalVariableOrMethodParameter
+        try {
+            synchronized (monitor) {
+                do {
+                    // The documentation says "Block until an Activity is created
+                    // that matches this monitor." This statement is true, but there are some other
+                    // true statements like: "Block until an Activity is destroyed" or
+                    // "Block until an Activity is resumed"...
+                    // this call will release synchronization monitor's monitor
+                    result = (T) monitor.waitForActivityWithTimeout(TIMEOUT_MS);
+                    if (result == null) {
+                        throw new RuntimeException("Timeout. Activity was not recreated.");
+                    }
+                } while (result == activity);
+            }
+        } finally {
+            instrumentation.removeMonitor(monitor);
         }
 
         // Finally wait for the recreated Activity to be resumed
-        waitUntilState(result, activityRule, Lifecycle.State.RESUMED);
+        waitUntilState(result, Lifecycle.State.RESUMED);
 
         return result;
     }
diff --git a/ui/ui-core/api/0.1.0-dev04.txt b/ui/ui-core/api/0.1.0-dev04.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/0.1.0-dev04.txt
+++ b/ui/ui-core/api/0.1.0-dev04.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev04.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/api/restricted_0.1.0-dev04.txt b/ui/ui-core/api/restricted_0.1.0-dev04.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev04.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev04.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index b39c0a1..6825a5a 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -1515,12 +1515,6 @@
     property public abstract int width;
   }
 
-  public enum ImageByteFormat {
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat png;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawRgba;
-    enum_constant public static final androidx.ui.graphics.ImageByteFormat rawUnmodified;
-  }
-
   public enum ImageConfig {
     enum_constant public static final androidx.ui.graphics.ImageConfig Alpha8;
     enum_constant public static final androidx.ui.graphics.ImageConfig Argb8888;
@@ -1533,13 +1527,6 @@
     ctor public ImageKt();
   }
 
-  public enum ImageRepeat {
-    enum_constant public static final androidx.ui.graphics.ImageRepeat noRepeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeat;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatX;
-    enum_constant public static final androidx.ui.graphics.ImageRepeat repeatY;
-  }
-
   public final class LinearGradient extends androidx.ui.graphics.ShaderBrush {
     method public androidx.ui.graphics.LinearGradient copy(java.util.List<androidx.ui.graphics.Color> colors, java.util.List<java.lang.Float>? stops, androidx.ui.core.Px startX, androidx.ui.core.Px startY, androidx.ui.core.Px endX, androidx.ui.core.Px endY, androidx.ui.graphics.TileMode tileMode);
   }
@@ -2161,43 +2148,6 @@
 
 package androidx.ui.vectormath64 {
 
-  public final class Matrix2 {
-    ctor public Matrix2(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    ctor public Matrix2();
-    ctor public Matrix2(androidx.ui.vectormath64.Matrix2 m);
-    method public androidx.ui.vectormath64.Vector2 component1();
-    method public androidx.ui.vectormath64.Vector2 component2();
-    method public androidx.ui.vectormath64.Matrix2 copy(androidx.ui.vectormath64.Vector2 x, androidx.ui.vectormath64.Vector2 y);
-    method public operator androidx.ui.vectormath64.Matrix2 dec();
-    method public operator androidx.ui.vectormath64.Matrix2 div(float v);
-    method public operator androidx.ui.vectormath64.Vector2 get(int column);
-    method public operator float get(int column, int row);
-    method public operator androidx.ui.vectormath64.Vector2 get(androidx.ui.vectormath64.MatrixColumn column);
-    method public operator float get(androidx.ui.vectormath64.MatrixColumn column, int row);
-    method public inline java.util.List<java.lang.Float> getM2storage();
-    method public androidx.ui.vectormath64.Vector2 getX();
-    method public androidx.ui.vectormath64.Vector2 getY();
-    method public operator androidx.ui.vectormath64.Matrix2 inc();
-    method public operator androidx.ui.vectormath64.Matrix2 minus(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 plus(float v);
-    method public operator void set(int column, androidx.ui.vectormath64.Vector2 v);
-    method public operator void set(int column, int row, float v);
-    method public void setX(androidx.ui.vectormath64.Vector2 p);
-    method public void setY(androidx.ui.vectormath64.Vector2 p);
-    method public operator androidx.ui.vectormath64.Matrix2 times(float v);
-    method public operator androidx.ui.vectormath64.Matrix2 times(androidx.ui.vectormath64.Matrix2 m);
-    method public operator androidx.ui.vectormath64.Vector2 times(androidx.ui.vectormath64.Vector2 v);
-    method public float[] toFloatArray();
-    method public operator androidx.ui.vectormath64.Matrix2 unaryMinus();
-    property public final inline java.util.List<java.lang.Float> m2storage;
-    field public static final androidx.ui.vectormath64.Matrix2.Companion! Companion;
-  }
-
-  public static final class Matrix2.Companion {
-    method public androidx.ui.vectormath64.Matrix2 identity();
-    method public androidx.ui.vectormath64.Matrix2 of(float... a);
-  }
-
   public final class Matrix3 {
     ctor public Matrix3(androidx.ui.vectormath64.Vector3 x, androidx.ui.vectormath64.Vector3 y, androidx.ui.vectormath64.Vector3 z);
     ctor public Matrix3();
@@ -2360,7 +2310,6 @@
     method public static androidx.ui.vectormath64.Matrix4 scale(androidx.ui.vectormath64.Matrix4 m);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Vector3 t);
     method public static androidx.ui.vectormath64.Matrix4 translation(androidx.ui.vectormath64.Matrix4 m);
-    method public static androidx.ui.vectormath64.Matrix2 transpose(androidx.ui.vectormath64.Matrix2 m);
     method public static androidx.ui.vectormath64.Matrix3 transpose(androidx.ui.vectormath64.Matrix3 m);
     method public static androidx.ui.vectormath64.Matrix4 transpose(androidx.ui.vectormath64.Matrix4 m);
   }
@@ -2368,10 +2317,7 @@
   public final class ScalarKt {
     ctor public ScalarKt();
     method public static inline float degrees(float v);
-    method public static inline float fract(float v);
-    method public static inline float mix(float a, float b, float x);
     method public static inline float radians(float v);
-    method public static inline float sqr(float v);
     field public static final float FOUR_PI = 12.566371f;
     field public static final float HALF_PI = 1.5707964f;
     field public static final float INV_FOUR_PI = 0.07957747f;
@@ -2688,12 +2634,6 @@
     method public static inline operator androidx.ui.vectormath64.Vector2 minus(float, androidx.ui.vectormath64.Vector2 v);
     method public static inline operator androidx.ui.vectormath64.Vector3 minus(float, androidx.ui.vectormath64.Vector3 v);
     method public static inline operator androidx.ui.vectormath64.Vector4 minus(float, androidx.ui.vectormath64.Vector4 v);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector2 mix(androidx.ui.vectormath64.Vector2 a, androidx.ui.vectormath64.Vector2 b, androidx.ui.vectormath64.Vector2 x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector3 mix(androidx.ui.vectormath64.Vector3 a, androidx.ui.vectormath64.Vector3 b, androidx.ui.vectormath64.Vector3 x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, float x);
-    method public static inline androidx.ui.vectormath64.Vector4 mix(androidx.ui.vectormath64.Vector4 a, androidx.ui.vectormath64.Vector4 b, androidx.ui.vectormath64.Vector4 x);
     method public static androidx.ui.vectormath64.Vector2 normalize(androidx.ui.vectormath64.Vector2 v);
     method public static androidx.ui.vectormath64.Vector3 normalize(androidx.ui.vectormath64.Vector3 v);
     method public static androidx.ui.vectormath64.Vector4 normalize(androidx.ui.vectormath64.Vector4 v);
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt
deleted file mode 100644
index 47551be..0000000
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/ImageByteFormat.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.ui.graphics
-
-/**
- * The format in which image bytes should be returned when using
- * [Image.toByteData].
- */
-enum class ImageByteFormat {
-    /**
-     * Raw RGBA format.
-     *
-     * Unencoded bytes, in RGBA row-primary form, 8 bits per channel.
-     */
-    rawRgba,
-
-    /**
-     * Raw unmodified format.
-     *
-     * Unencoded bytes, in the image's existing format. For example, a grayscale
-     * image may use a single 8-bit channel for each pixel.
-     */
-    rawUnmodified,
-
-    /**
-     * PNG format.
-     *
-     * A loss-less compression format for images. This format is well suited for
-     * images with hard edges, such as screenshots or sprites, and images with
-     * text. Transparency is supported. The PNG format supports images up to
-     * 2,147,483,647 pixels in either dimension, though in practice available
-     * memory provides a more immediate limitation on maximum image size.
-     *
-     * PNG images normally use the `.png` file extension and the `image/png` MIME
-     * type.
-     *
-     * See also:
-     *
-     *  * <https://en.wikipedia.org/wiki/Portable_Network_Graphics>, the Wikipedia page on PNG.
-     *  * <https://tools.ietf.org/rfc/rfc2083.txt>, the PNG standard.
-     */
-    png
-}
\ No newline at end of file
diff --git a/ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt b/ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt
deleted file mode 100644
index 31f1f01..0000000
--- a/ui/ui-core/src/main/java/androidx/ui/graphics/ImageRepeat.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package androidx.ui.graphics
-
-/** How to paint any portions of a box not covered by an image. */
-enum class ImageRepeat {
-    /** Repeat the image in both the x and y directions until the box is filled. */
-    repeat,
-
-    /** Repeat the image in the x direction until the box is filled horizontally. */
-    repeatX,
-
-    /** Repeat the image in the y direction until the box is filled vertically. */
-    repeatY,
-
-    /** Leave uncovered portions of the box transparent. */
-    noRepeat
-}
\ No newline at end of file
diff --git a/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix2.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix2.kt
deleted file mode 100644
index e94f66e..0000000
--- a/ui/ui-core/src/main/java/androidx/ui/vectormath64/Matrix2.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package androidx.ui.vectormath64
-
-data class Matrix2(
-    var x: Vector2 = Vector2(x = 1.0f),
-    var y: Vector2 = Vector2(y = 1.0f)
-) {
-    constructor(m: Matrix2) : this(m.x.copy(), m.y.copy())
-
-    companion object {
-        fun of(vararg a: Float): Matrix2 {
-            require(a.size >= 4)
-            return Matrix2(
-                    Vector2(a[0], a[2]),
-                    Vector2(a[1], a[3])
-            )
-        }
-
-        fun identity() = Matrix2()
-    }
-
-    inline val m2storage: List<Float>
-        get() = x.v2storage + y.v2storage
-
-    operator fun get(column: Int) = when (column) {
-        0 -> x
-        1 -> y
-        else -> throw IllegalArgumentException("column must be in 0..1")
-    }
-    operator fun get(column: Int, row: Int) = get(column)[row]
-
-    operator fun get(column: MatrixColumn) = when (column) {
-        MatrixColumn.X -> x
-        MatrixColumn.Y -> y
-        else -> throw IllegalArgumentException("column must be X or Y")
-    }
-    operator fun get(column: MatrixColumn, row: Int) = get(column)[row]
-
-    operator fun set(column: Int, v: Vector2) {
-        this[column].xy = v
-    }
-    operator fun set(column: Int, row: Int, v: Float) {
-        this[column][row] = v
-    }
-
-    operator fun unaryMinus() = Matrix2(-x, -y)
-    operator fun inc() = Matrix2(this).apply {
-        ++x
-        ++y
-    }
-    operator fun dec() = Matrix2(this).apply {
-        --x
-        --y
-    }
-
-    operator fun plus(v: Float) = Matrix2(x + v, y + v)
-    operator fun minus(v: Float) = Matrix2(x - v, y - v)
-    operator fun times(v: Float) = Matrix2(x * v, y * v)
-    operator fun div(v: Float) = Matrix2(x / v, y / v)
-
-    operator fun times(m: Matrix2): Matrix2 {
-        val t = transpose(this)
-        return Matrix2(
-                Vector2(dot(t.x, m.x), dot(t.y, m.x)),
-                Vector2(dot(t.x, m.y), dot(t.y, m.y))
-        )
-    }
-
-    operator fun times(v: Vector2): Vector2 {
-        val t = transpose(this)
-        return Vector2(dot(t.x, v), dot(t.y, v))
-    }
-
-    fun toFloatArray() = floatArrayOf(
-            x.x, y.x,
-            x.y, y.y
-    )
-
-    override fun toString(): String {
-        return """
-            |${x.x} ${y.x}|
-            |${x.y} ${y.y}|
-            """.trimIndent()
-    }
-}
diff --git a/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
index f4631a1..b1feb1c 100644
--- a/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/vectormath64/MatrixExtensions.kt
@@ -19,11 +19,6 @@
 import kotlin.math.sin
 import kotlin.math.tan
 
-fun transpose(m: Matrix2) = Matrix2(
-        Vector2(m.x.x, m.y.x),
-        Vector2(m.x.y, m.y.y)
-)
-
 fun transpose(m: Matrix3) = Matrix3(
         Vector3(m.x.x, m.y.x, m.z.x),
         Vector3(m.x.y, m.y.y, m.z.y),
diff --git a/ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt
index 1e9c3cb..84e7660 100644
--- a/ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/vectormath64/Scalar.kt
@@ -25,12 +25,6 @@
 const val INV_TWO_PI = INV_PI * 0.5f
 const val INV_FOUR_PI = INV_PI * 0.25f
 
-inline fun mix(a: Float, b: Float, x: Float) = a * (1.0f - x) + b * x
-
 inline fun degrees(v: Float) = v * (180.0f * INV_PI)
 
 inline fun radians(v: Float) = v * (PI / 180.0f)
-
-inline fun fract(v: Float) = v % 1
-
-inline fun sqr(v: Float) = v * v
diff --git a/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt b/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
index 9957019..a5d2b2c 100644
--- a/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
+++ b/ui/ui-core/src/main/java/androidx/ui/vectormath64/VectorExtensions.kt
@@ -39,7 +39,7 @@
 inline fun reflect(i: Vector2, n: Vector2) = i - 2.0f * dot(n, i) * n
 fun refract(i: Vector2, n: Vector2, eta: Float): Vector2 {
     val d = dot(n, i)
-    val k = 1.0f - eta * eta * (1.0f - sqr(d))
+    val k = 1.0f - eta * eta * (1.0f - (d * d))
     return if (k < 0.0f) Vector2(0.0f) else eta * i - (eta * d + sqrt(k)) * n
 }
 
@@ -57,18 +57,6 @@
     )
 }
 
-inline fun mix(a: Vector2, b: Vector2, x: Float): Vector2 {
-    return Vector2(
-            mix(a.x, b.x, x),
-            mix(a.y, b.y, x))
-}
-
-inline fun mix(a: Vector2, b: Vector2, x: Vector2): Vector2 {
-    return Vector2(
-            mix(a.x, b.x, x.x),
-            mix(a.y, b.y, x.y))
-}
-
 inline fun min(v: Vector2) = min(v.x, v.y)
 inline fun min(a: Vector2, b: Vector2) = Vector2(min(a.x, b.x), min(a.y, b.y))
 inline fun max(v: Vector2) = max(v.x, v.y)
@@ -100,7 +88,7 @@
 inline fun reflect(i: Vector3, n: Vector3) = i - 2.0f * dot(n, i) * n
 fun refract(i: Vector3, n: Vector3, eta: Float): Vector3 {
     val d = dot(n, i)
-    val k = 1.0f - eta * eta * (1.0f - sqr(d))
+    val k = 1.0f - eta * eta * (1.0f - (d * d))
     return if (k < 0.0f) Vector3(0.0f) else eta * i - (eta * d + sqrt(k)) * n
 }
 
@@ -120,20 +108,6 @@
     )
 }
 
-inline fun mix(a: Vector3, b: Vector3, x: Float): Vector3 {
-    return Vector3(
-            mix(a.x, b.x, x),
-            mix(a.y, b.y, x),
-            mix(a.z, b.z, x))
-}
-
-inline fun mix(a: Vector3, b: Vector3, x: Vector3): Vector3 {
-    return Vector3(
-            mix(a.x, b.x, x.x),
-            mix(a.y, b.y, x.y),
-            mix(a.z, b.z, x.z))
-}
-
 inline fun min(v: Vector3) = min(v.x, min(v.y, v.z))
 inline fun min(a: Vector3, b: Vector3) = Vector3(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z))
 inline fun max(v: Vector3) = max(v.x, max(v.y, v.z))
@@ -177,22 +151,6 @@
     )
 }
 
-inline fun mix(a: Vector4, b: Vector4, x: Float): Vector4 {
-    return Vector4(
-            mix(a.x, b.x, x),
-            mix(a.y, b.y, x),
-            mix(a.z, b.z, x),
-            mix(a.w, b.w, x))
-}
-
-inline fun mix(a: Vector4, b: Vector4, x: Vector4): Vector4 {
-    return Vector4(
-            mix(a.x, b.x, x.x),
-            mix(a.y, b.y, x.y),
-            mix(a.z, b.z, x.z),
-            mix(a.w, b.w, x.w))
-}
-
 inline fun min(v: Vector4) = min(v.x, min(v.y, min(v.z, v.w)))
 inline fun min(a: Vector4, b: Vector4): Vector4 {
     return Vector4(min(a.x, b.x), min(a.y, b.y), min(a.z, b.z), min(a.w, b.w))
diff --git a/ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt b/ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt
index 0b8bacd..242e6cc 100644
--- a/ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt
+++ b/ui/ui-framework/src/main/java/androidx/ui/core/selection/Selection.kt
@@ -92,7 +92,7 @@
             selection = selection.copy(end = other.end)
         }
 
-        selection = selection.copy(handlesCrossed = this.handlesCrossed || other.handlesCrossed)
+        selection = selection.copy(handlesCrossed = other.handlesCrossed)
 
         return selection
     }
diff --git a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionTest.kt b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionTest.kt
index 879900b..4a4a616 100644
--- a/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionTest.kt
+++ b/ui/ui-framework/src/test/java/androidx/ui/core/selection/SelectionTest.kt
@@ -197,6 +197,63 @@
     }
 
     @Test
+    fun selection_handles_crossed_to_not_crossed() {
+        val startOffset1 = 20
+        val endOffset1 = 9
+        val startCoordinates1 = PxPosition(50.px, 50.px)
+        val endCoordinates1 = PxPosition(20.px, 20.px)
+        val layoutCoordinates: LayoutCoordinates = mock()
+        val startAnchor1 = Selection.AnchorInfo(
+            coordinates = startCoordinates1,
+            direction = TextDirection.Ltr,
+            offset = startOffset1,
+            layoutCoordinates = layoutCoordinates
+        )
+        val endAnchor1 = Selection.AnchorInfo(
+            coordinates = endCoordinates1,
+            direction = TextDirection.Ltr,
+            offset = endOffset1,
+            layoutCoordinates = layoutCoordinates
+        )
+        val oldSelection = Selection(
+            start = startAnchor1,
+            end = endAnchor1,
+            handlesCrossed = true
+        )
+        val startOffset2 = 0
+        val endOffset2 = 30
+        val startCoordinates2 = PxPosition(0.px, 20.px)
+        val endCoordinates2 = PxPosition(50.px, 300.px)
+        val startAnchor2 = Selection.AnchorInfo(
+            coordinates = startCoordinates2,
+            direction = TextDirection.Ltr,
+            offset = startOffset2,
+            layoutCoordinates = layoutCoordinates
+        )
+        val endAnchor2 = Selection.AnchorInfo(
+            coordinates = endCoordinates2,
+            direction = TextDirection.Ltr,
+            offset = endOffset2,
+            layoutCoordinates = layoutCoordinates
+        )
+        val newSelection = Selection(
+            start = startAnchor2,
+            end = endAnchor2,
+            handlesCrossed = false
+        )
+
+        val selection = oldSelection.merge(newSelection)
+
+        assertThat(selection.start.offset).isEqualTo(startOffset2)
+        assertThat(selection.end.offset).isEqualTo(endOffset2)
+        assertThat(selection.start.coordinates).isEqualTo(startCoordinates2)
+        assertThat(selection.end.coordinates).isEqualTo(endCoordinates2)
+        assertThat(selection.start.layoutCoordinates).isEqualTo(layoutCoordinates)
+        assertThat(selection.end.layoutCoordinates).isEqualTo(layoutCoordinates)
+        assertThat(selection.handlesCrossed).isFalse()
+    }
+
+    @Test
     fun selection_toTextRange_handles_not_cross() {
         val startOffset = 0
         val endOffset = 6
diff --git a/webkit/integration-tests/testapp/src/main/AndroidManifest.xml b/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
index 845bc22..9e80901 100644
--- a/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
+++ b/webkit/integration-tests/testapp/src/main/AndroidManifest.xml
@@ -108,5 +108,8 @@
         <activity
             android:name=".WebMessageListenerActivity"
             android:exported="true" />
+        <activity
+            android:name=".WebMessageListenerMaliciousWebsiteActivity"
+            android:exported="true" />
     </application>
 </manifest>
diff --git a/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_demo.js b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_demo.js
new file mode 100644
index 0000000..67e5a82
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_demo.js
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+allFramesObject.onmessage = function(event) {
+  document.getElementById('reply_message').innerText = event.data;
+}
+function sendMessage(e) {
+  e.preventDefault();
+  const message = document.getElementById("send_message").value;
+  allFramesObject.postMessage(message);
+}
+function checkForObject(objectName, elementId) {
+  var verb = window.hasOwnProperty(objectName) ? "do" : "don't";
+  var element = document.getElementById(elementId);
+  element.innerText = `I ${verb} have access to ${objectName}`;
+}
+function detectObjects(event) {
+  checkForObject('restrictedObject', 'restricted_object_result');
+  checkForObject('allFramesObject', 'all_frames_object_result');
+}
+window.addEventListener("DOMContentLoaded", detectObjects);
diff --git a/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_genuine.html b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_genuine.html
new file mode 100644
index 0000000..0d43a5f
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_genuine.html
@@ -0,0 +1,30 @@
+<html>
+<!-- Copyright 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<head>
+  <script src="https://example.com/androidx_webkit/example/assets/www/web_message_listener_demo.js">
+  </script>
+</head>
+<body>
+  <h1>example.com.</h1>
+  <div id="restricted_object_result" style="color:red">Detecting...</div>
+  <div id="all_frames_object_result" style="color:red">Detecting...</div>
+  <div>
+    <input value="ping!" id="send_message">
+    <button type="button" onclick="sendMessage(event)">Send Message</button>
+    <div id='reply_message'></div>
+  </div>
+</body>
+</html>
diff --git a/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_malicious.html b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_malicious.html
new file mode 100644
index 0000000..07cd7ce
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/assets/www/web_message_listener_malicious.html
@@ -0,0 +1,34 @@
+<html>
+<!-- Copyright 2019 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<head>
+  <script src="https://malicious.com/androidx_webkit/example/assets/www/web_message_listener_demo.js">
+  </script>
+</head>
+<body>
+  <h1>malicious.com.</h1>
+  <p>A malicious website may try to iframe a well-meaning website.</p>
+  <div id="restricted_object_result" style="color:red">Detecting...</div>
+  <div id="all_frames_object_result" style="color:red">Detecting...</div>
+  <div>
+    <input value="ping!" id="send_message">
+    <button type="button" onclick="sendMessage(event)">Send Message</button>
+    <div id='reply_message'></div>
+  </div>
+  <iframe src="https://example.com/androidx_webkit/example/assets/www/web_message_listener_genuine.html"
+          height="200" style="margin: 30px">
+  </iframe>
+</body>
+</html>
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/JsJavaInteractionActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/JsJavaInteractionActivity.java
index 5f58f3e..a6ddade 100644
--- a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/JsJavaInteractionActivity.java
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/JsJavaInteractionActivity.java
@@ -42,6 +42,11 @@
                 new MenuListView.MenuItem(
                         getResources().getString(R.string.web_message_listener_activity_title),
                         new Intent(activityContext, WebMessageListenerActivity.class)),
+                new MenuListView.MenuItem(
+                        getResources().getString(
+                                R.string.web_message_listener_malicious_website_activity_title),
+                        new Intent(
+                                activityContext, WebMessageListenerMaliciousWebsiteActivity.class)),
         };
         listView.setItems(menuItems);
     }
diff --git a/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/WebMessageListenerMaliciousWebsiteActivity.java b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/WebMessageListenerMaliciousWebsiteActivity.java
new file mode 100644
index 0000000..d23e6f7
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/java/com/example/androidx/webkit/WebMessageListenerMaliciousWebsiteActivity.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.example.androidx.webkit;
+
+import static androidx.webkit.WebViewAssetLoader.AssetsPathHandler;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Bundle;
+import android.webkit.WebResourceRequest;
+import android.webkit.WebResourceResponse;
+import android.webkit.WebView;
+import android.webkit.WebViewClient;
+import android.widget.Toast;
+
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.webkit.JsReplyProxy;
+import androidx.webkit.WebMessageCompat;
+import androidx.webkit.WebViewAssetLoader;
+import androidx.webkit.WebViewCompat;
+import androidx.webkit.WebViewFeature;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * An {@link Activity} to show how WebMessageListener deals with malicious websites.
+ */
+@SuppressLint("RestrictedApi")
+public class WebMessageListenerMaliciousWebsiteActivity extends AppCompatActivity {
+    private final Uri mMaliciousUrl = new Uri.Builder()
+                                            .scheme("https")
+                                            .authority("malicious.com")
+                                            .appendPath("androidx_webkit")
+                                            .appendPath("example")
+                                            .appendPath("assets")
+                                            .build();
+
+    private static class MyWebViewClient extends WebViewClient {
+        private final WebViewAssetLoader[] mAssetLoaders;
+
+        MyWebViewClient(WebViewAssetLoader[] loaders) {
+            mAssetLoaders = loaders;
+        }
+
+        @Override
+        @RequiresApi(21)
+        public WebResourceResponse shouldInterceptRequest(
+                WebView view, WebResourceRequest request) {
+            for (WebViewAssetLoader loader : mAssetLoaders) {
+                WebResourceResponse response = loader.shouldInterceptRequest(request.getUrl());
+                if (response != null) {
+                    return response;
+                }
+            }
+            return null;
+        }
+
+        @Override
+        @SuppressWarnings("deprecation") // use the old one for compatibility with all API levels.
+        public WebResourceResponse shouldInterceptRequest(WebView view, String request) {
+            for (WebViewAssetLoader loader : mAssetLoaders) {
+                WebResourceResponse response = loader.shouldInterceptRequest(Uri.parse(request));
+                if (response != null) {
+                    return response;
+                }
+            }
+            return null;
+        }
+    }
+
+    private static class AvailableInAllowedOriginsFrameMessageListener
+            implements WebViewCompat.WebMessageListener {
+        @Override
+        public void onPostMessage(WebView view, WebMessageCompat message, Uri sourceOrigin,
+                boolean isMainFrame, JsReplyProxy replyProxy) {
+            replyProxy.postMessage("Hello");
+        }
+    }
+
+    private static class AvailableInAllFramesMessageListener
+            implements WebViewCompat.WebMessageListener {
+        private final Context mContext;
+        private final List<String> mBadAuthorities;
+
+        AvailableInAllFramesMessageListener(Context context, List<String> badAuthorities) {
+            mContext = context;
+            mBadAuthorities = badAuthorities;
+        }
+
+        @Override
+        public void onPostMessage(WebView view, WebMessageCompat message, Uri sourceOrigin,
+                boolean isMainFrame, JsReplyProxy replyProxy) {
+            for (String badAuthority : mBadAuthorities) {
+                if (sourceOrigin.getAuthority().equals(badAuthority)) {
+                    Toast.makeText(mContext, "Message from known bad website, no response.",
+                                 Toast.LENGTH_SHORT)
+                            .show();
+                    return;
+                }
+            }
+            replyProxy.postMessage("Reply from app for " + message.getData());
+        }
+    }
+
+    @SuppressLint("SetJavascriptEnabled")
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_web_message_listener_malicious_website);
+        setTitle(R.string.web_message_listener_malicious_website_activity_title);
+        WebkitHelpers.appendWebViewVersionToTitle(this);
+
+        if (!WebViewFeature.isFeatureSupported(WebViewFeature.WEB_MESSAGE_LISTENER)) {
+            WebkitHelpers.showMessageInActivity(WebMessageListenerMaliciousWebsiteActivity.this,
+                    R.string.webkit_api_not_available);
+            return;
+        }
+
+        // Use WebViewAssetLoader to load html page from app's assets.
+        WebViewAssetLoader assetLoaderMalicious =
+                new WebViewAssetLoader.Builder()
+                        .setDomain("malicious.com")
+                        .addPathHandler(mMaliciousUrl.getPath() + "/", new AssetsPathHandler(this))
+                        .build();
+        WebViewAssetLoader assetLoaderGenuine =
+                new WebViewAssetLoader.Builder()
+                        .setDomain("example.com")
+                        .addPathHandler(
+                                "/androidx_webkit/example/assets/", new AssetsPathHandler(this))
+                        .build();
+
+        WebView webView = findViewById(R.id.webview);
+        webView.setWebViewClient(new MyWebViewClient(
+                new WebViewAssetLoader[] {assetLoaderMalicious, assetLoaderGenuine}));
+        webView.getSettings().setJavaScriptEnabled(true);
+
+        // If you only intend to communicate with a limited number of origins, prefer only injecting
+        // the listener in those frames.
+        WebViewCompat.addWebMessageListener(webView, "restrictedObject",
+                Arrays.asList("https://example.com"),
+                new AvailableInAllowedOriginsFrameMessageListener());
+
+        // If you need to communicate with a wider set of origins but are aware of some origins
+        // matching your filter that you need to block communication with, you can check the sending
+        // frame's origin on the Java side in onPostMessage().
+        WebViewCompat.addWebMessageListener(webView, "allFramesObject", Arrays.asList("*"),
+                new AvailableInAllFramesMessageListener(this, Arrays.asList("malicious.com")));
+
+        webView.loadUrl(
+                Uri.withAppendedPath(mMaliciousUrl, "www/web_message_listener_malicious.html")
+                        .toString());
+    }
+}
diff --git a/webkit/integration-tests/testapp/src/main/res/layout/activity_web_message_listener_malicious_website.xml b/webkit/integration-tests/testapp/src/main/res/layout/activity_web_message_listener_malicious_website.xml
new file mode 100644
index 0000000..90b0b8a
--- /dev/null
+++ b/webkit/integration-tests/testapp/src/main/res/layout/activity_web_message_listener_malicious_website.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2019 The Android Open Source Project
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+          http://www.apache.org/licenses/LICENSE-2.0
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/activity_web_message_listener"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <WebView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:id="@+id/webview"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</LinearLayout>
diff --git a/webkit/integration-tests/testapp/src/main/res/values/strings.xml b/webkit/integration-tests/testapp/src/main/res/values/strings.xml
index d955806..e0cf5b1 100644
--- a/webkit/integration-tests/testapp/src/main/res/values/strings.xml
+++ b/webkit/integration-tests/testapp/src/main/res/values/strings.xml
@@ -72,4 +72,5 @@
     <string name="fullscreen_activity_title">Fullscreen web contents Demo</string>
     <string name="js_java_interaction_activity_title">JavaScript - Java communication</string>
     <string name="web_message_listener_activity_title">WebMessageListener Demo</string>
+    <string name="web_message_listener_malicious_website_activity_title">Malicious Website Demo</string>
 </resources>