diff --git a/benchmark/benchmark-macro/api/current.txt b/benchmark/benchmark-macro/api/current.txt
index 1bed5d9..8519b25 100644
--- a/benchmark/benchmark-macro/api/current.txt
+++ b/benchmark/benchmark-macro/api/current.txt
@@ -4,7 +4,7 @@
   @RequiresApi(29) public final class Api29Kt {
   }
 
-  public abstract sealed class CompilationMode {
+  @RequiresApi(21) public abstract sealed class CompilationMode {
   }
 
   public static final class CompilationMode.BaselineProfile extends androidx.benchmark.macro.CompilationMode {
@@ -31,7 +31,7 @@
   public final class ConfigurationErrorKt {
   }
 
-  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+  @RequiresApi(21) public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
     ctor public FrameTimingMetric();
   }
 
@@ -41,7 +41,7 @@
   public final class MacrobenchmarkKt {
   }
 
-  public final class MacrobenchmarkScope {
+  @RequiresApi(21) public final class MacrobenchmarkScope {
     ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
     method public void dropKernelPageCache();
     method public void killProcess();
@@ -50,7 +50,7 @@
     method public void startActivityAndWait(android.content.Intent intent);
   }
 
-  public abstract sealed class Metric {
+  @RequiresApi(21) public abstract sealed class Metric {
   }
 
   public final class MetricKt {
diff --git a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt b/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
index 1bed5d9..8519b25 100644
--- a/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
+++ b/benchmark/benchmark-macro/api/public_plus_experimental_current.txt
@@ -4,7 +4,7 @@
   @RequiresApi(29) public final class Api29Kt {
   }
 
-  public abstract sealed class CompilationMode {
+  @RequiresApi(21) public abstract sealed class CompilationMode {
   }
 
   public static final class CompilationMode.BaselineProfile extends androidx.benchmark.macro.CompilationMode {
@@ -31,7 +31,7 @@
   public final class ConfigurationErrorKt {
   }
 
-  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+  @RequiresApi(21) public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
     ctor public FrameTimingMetric();
   }
 
@@ -41,7 +41,7 @@
   public final class MacrobenchmarkKt {
   }
 
-  public final class MacrobenchmarkScope {
+  @RequiresApi(21) public final class MacrobenchmarkScope {
     ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
     method public void dropKernelPageCache();
     method public void killProcess();
@@ -50,7 +50,7 @@
     method public void startActivityAndWait(android.content.Intent intent);
   }
 
-  public abstract sealed class Metric {
+  @RequiresApi(21) public abstract sealed class Metric {
   }
 
   public final class MetricKt {
diff --git a/benchmark/benchmark-macro/api/restricted_current.txt b/benchmark/benchmark-macro/api/restricted_current.txt
index 3568b81..25284a55 100644
--- a/benchmark/benchmark-macro/api/restricted_current.txt
+++ b/benchmark/benchmark-macro/api/restricted_current.txt
@@ -4,7 +4,7 @@
   @RequiresApi(29) public final class Api29Kt {
   }
 
-  public abstract sealed class CompilationMode {
+  @RequiresApi(21) public abstract sealed class CompilationMode {
   }
 
   public static final class CompilationMode.BaselineProfile extends androidx.benchmark.macro.CompilationMode {
@@ -35,7 +35,7 @@
   public final class ConfigurationErrorKt {
   }
 
-  public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
+  @RequiresApi(21) public final class FrameTimingMetric extends androidx.benchmark.macro.Metric {
     ctor public FrameTimingMetric();
   }
 
@@ -45,7 +45,7 @@
   public final class MacrobenchmarkKt {
   }
 
-  public final class MacrobenchmarkScope {
+  @RequiresApi(21) public final class MacrobenchmarkScope {
     ctor public MacrobenchmarkScope(String packageName, boolean launchWithClearTask);
     method public void dropKernelPageCache();
     method public void killProcess();
@@ -54,7 +54,7 @@
     method public void startActivityAndWait(android.content.Intent intent);
   }
 
-  public abstract sealed class Metric {
+  @RequiresApi(21) public abstract sealed class Metric {
   }
 
   public final class MetricKt {
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/CompilationModeTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/CompilationModeTest.kt
index 84d0a07..6ceeb1c 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/CompilationModeTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/CompilationModeTest.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark.macro
 
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import org.junit.Assert.assertEquals
@@ -29,6 +30,7 @@
 
 @RunWith(AndroidJUnit4::class)
 @SmallTest
+@SdkSuppress(minSdkVersion = 21)
 public class CompilationModeTest {
     private val vmRunningInterpretedOnly: Boolean
 
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
index 8efef1c..114cafd 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/MacrobenchmarkTest.kt
@@ -25,6 +25,7 @@
 import kotlin.test.assertTrue
 
 @RunWith(AndroidJUnit4::class)
+@SdkSuppress(minSdkVersion = 21)
 @SmallTest
 class MacrobenchmarkTest {
     @Test
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/OutputsTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/OutputsTest.kt
index 1a72cd3..a56635d7 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/OutputsTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/OutputsTest.kt
@@ -18,6 +18,7 @@
 
 import androidx.benchmark.Outputs
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.uiautomator.UiDevice
@@ -46,6 +47,7 @@
     }
 
     @Test
+    @SdkSuppress(minSdkVersion = 21) // executeShellCommand
     public fun dirUsableByAppAndShell_writeAppReadShell() {
         val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
         val dir = Outputs.dirUsableByAppAndShell
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoConfigTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoConfigTest.kt
index 7f7da87..365cf76 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoConfigTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoConfigTest.kt
@@ -53,12 +53,14 @@
         assertFalse(ftraceConfig.atrace_categories.contains("memory"))
     }
 
+    @SdkSuppress(minSdkVersion = 21)
     @Test
     fun validateAndEncode() {
         // default config shouldn't throw
         perfettoConfig(listOf(Packages.TEST)).validateAndEncode()
     }
 
+    @SdkSuppress(minSdkVersion = 21)
     @Test
     fun validateAndEncode_invalidAtraceCategories() {
         val invalidConfig = TraceConfig(
@@ -86,7 +88,7 @@
         assertTrue(exception.message!!.contains("bad_category"))
     }
 
-    @SdkSuppress(maxSdkVersion = 27)
+    @SdkSuppress(minSdkVersion = 21, maxSdkVersion = 27)
     @Test
     fun validateAndEncode_invalidWildcard() {
         val invalidConfig = TraceConfig(
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessorTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessorTest.kt
index 3726a28..9ae4f55 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessorTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessorTest.kt
@@ -19,6 +19,7 @@
 import androidx.benchmark.macro.device
 import androidx.benchmark.macro.perfetto.PerfettoHelper.Companion.isAbiSupported
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import org.junit.Assert.assertTrue
@@ -30,6 +31,7 @@
 import kotlin.test.assertFailsWith
 
 @SmallTest
+@SdkSuppress(minSdkVersion = 21)
 @RunWith(AndroidJUnit4::class)
 class PerfettoTraceProcessorTest {
     @Test
diff --git a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/ShellUtilsTest.kt b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/ShellUtilsTest.kt
index 229ae61..3a53e7e 100644
--- a/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/ShellUtilsTest.kt
+++ b/benchmark/benchmark-macro/src/androidTest/java/androidx/benchmark/macro/perfetto/ShellUtilsTest.kt
@@ -29,6 +29,7 @@
 import kotlin.test.assertNotNull
 
 @MediumTest
+@SdkSuppress(minSdkVersion = 21)
 @RunWith(AndroidJUnit4::class)
 class ShellUtilsTest {
     private val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt
index 72a6658..c0c2b63 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt
@@ -18,6 +18,7 @@
 
 import android.app.Instrumentation
 import android.util.Log
+import androidx.annotation.RequiresApi
 import androidx.annotation.RestrictTo
 import androidx.benchmark.macro.CompilationMode.SpeedProfile
 import androidx.profileinstaller.ProfileInstallReceiver
@@ -32,6 +33,7 @@
  * For example, [SpeedProfile] will run a configurable number of profiling iterations to generate
  * a profile, and use that to compile the target app.
  */
+@RequiresApi(21)
 public sealed class CompilationMode(
     // for modes other than [None], is argument passed `cmd package compile`
     private val compileArgument: String?
@@ -95,6 +97,7 @@
  *
  * For more information: https://source.android.com/devices/tech/dalvik/jit-compiler
  */
+@RequiresApi(21)
 internal fun CompilationMode.compile(packageName: String, block: () -> Unit) {
     val instrumentation = InstrumentationRegistry.getInstrumentation()
     val device = instrumentation.device()
@@ -219,6 +222,7 @@
 /**
  * Compiles the application.
  */
+@RequiresApi(21)
 internal fun CompilationMode.compilePackage(instrumentation: Instrumentation, packageName: String) {
     val device = instrumentation.device()
     Log.d(TAG, "Compiling $packageName ($this)")
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
index 56d76cb..b4fd16c 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt
@@ -20,6 +20,7 @@
 import android.content.pm.PackageManager
 import android.os.Build
 import android.util.Log
+import androidx.annotation.RequiresApi
 import androidx.annotation.RestrictTo
 import androidx.benchmark.Arguments
 import androidx.benchmark.BenchmarkResult
@@ -92,6 +93,7 @@
  *
  * This function is a building block for public testing APIs
  */
+@RequiresApi(21)
 private fun macrobenchmark(
     uniqueName: String,
     className: String,
@@ -247,6 +249,7 @@
  *
  * @suppress
  */
+@RequiresApi(21)
 @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
 public fun macrobenchmarkWithStartupMode(
     uniqueName: String,
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
index 192490e..219c5aa 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt
@@ -18,6 +18,7 @@
 
 import android.content.Intent
 import android.util.Log
+import androidx.annotation.RequiresApi
 import androidx.benchmark.macro.perfetto.executeShellScript
 import androidx.benchmark.macro.perfetto.executeShellScriptWithStderr
 import androidx.test.platform.app.InstrumentationRegistry
@@ -28,6 +29,7 @@
  * Provides access to common operations in app automation, such as killing the app,
  * or navigating home.
  */
+@RequiresApi(21)
 public class MacrobenchmarkScope(
     private val packageName: String,
     /**
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
index f40148e..3f56922 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt
@@ -26,6 +26,7 @@
 /**
  * Metric interface.
  */
+@RequiresApi(21)
 public sealed class Metric {
     internal abstract fun configure(packageName: String)
 
@@ -41,6 +42,7 @@
     internal abstract fun getMetrics(packageName: String, tracePath: String): MetricsWithUiState
 }
 
+@RequiresApi(21)
 public class FrameTimingMetric : Metric() {
     private lateinit var packageName: String
     private val helper = JankCollectionHelper()
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoConfig.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoConfig.kt
index c28a518..fd3fb62 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoConfig.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoConfig.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark.macro.perfetto
 
 import android.os.Build
+import androidx.annotation.RequiresApi
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.uiautomator.UiDevice
 import perfetto.protos.DataSourceConfig
@@ -150,6 +151,7 @@
     ),
 )
 
+@RequiresApi(21) // needed for shell access
 internal fun TraceConfig.validateAndEncode(): ByteArray {
     val ftraceConfig = data_sources
         .mapNotNull { it.config?.ftrace_config }
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt
index 271192d..d7a5ff0 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/PerfettoTraceProcessor.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark.macro.perfetto
 
 import android.util.Log
+import androidx.annotation.RequiresApi
 import androidx.benchmark.Outputs
 import androidx.benchmark.macro.device
 import androidx.benchmark.macro.userspaceTrace
@@ -27,6 +28,7 @@
 /**
  * Enables parsing perfetto traces on-device
  */
+@RequiresApi(21)
 internal object PerfettoTraceProcessor {
     private const val TAG = "PerfettoTraceProcessor"
 
diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/ShellUtils.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/ShellUtils.kt
index a3125d2..3bc6c68 100644
--- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/ShellUtils.kt
+++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/perfetto/ShellUtils.kt
@@ -17,6 +17,7 @@
 package androidx.benchmark.macro.perfetto
 
 import android.os.Build
+import androidx.annotation.RequiresApi
 import androidx.benchmark.Outputs
 import androidx.test.uiautomator.UiDevice
 import java.io.File
@@ -24,6 +25,7 @@
 
 internal data class ShellOutput(val stdout: String, val stderr: String)
 
+@RequiresApi(21)
 private fun UiDevice.chmodExecutable(absoluteFilePath: String) {
     if (Build.VERSION.SDK_INT >= 23) {
         executeShellCommand("chmod +x $absoluteFilePath")
@@ -43,6 +45,7 @@
  * stdin/stderr is required, so that all stderr can be captured (instead of redirecting the
  * last command), and stdin can be read by other commands in the script (instead of just the 1st).
  */
+@RequiresApi(21)
 private fun UiDevice.executeShellScript(
     script: String,
     stdin: String?,
@@ -113,6 +116,7 @@
  *
  * @return ShellOutput, including stdout of full script, and stderr of last command.
  */
+@RequiresApi(21)
 internal fun UiDevice.executeShellScriptWithStderr(
     script: String,
     stdin: String? = null
@@ -142,6 +146,7 @@
  *
  * @return Stdout string
  */
+@RequiresApi(21)
 internal fun UiDevice.executeShellScript(script: String, stdin: String? = null): String {
     return executeShellScript(script, stdin, false).first
 }
@@ -149,6 +154,7 @@
 /**
  * Writes the inputStream to an executable file with the given name in `/data/local/tmp`
  */
+@RequiresApi(21)
 internal fun UiDevice.createRunnableExecutable(name: String, inputStream: InputStream): String {
     // dirUsableByAppAndShell is writable, but we can't execute there (as of Q),
     // so we copy to /data/local/tmp
@@ -179,10 +185,12 @@
  * Returns true if the shell session is rooted, and thus root commands can be run (e.g. atrace
  * commands with root-only tags)
  */
+@RequiresApi(21)
 internal fun UiDevice.isShellSessionRooted(): Boolean {
     return executeShellCommand("getprop service.adb.root").trim() == "1"
 }
 
+@RequiresApi(21)
 private fun UiDevice.moveToTmpAndMakeExecutable(src: String, dst: String) {
     // Note: we don't check for return values from the below, since shell based file
     // permission errors generally crash our process.
@@ -190,6 +198,7 @@
     chmodExecutable(dst)
 }
 
+@RequiresApi(21)
 internal fun UiDevice.isPackageAlive(packageName: String): Boolean {
     if (Build.VERSION.SDK_INT >= 24) {
         // On API 23 (first version to offer it) we observe that 'pidof'
diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
index 57c36fb..a065882 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXPlugin.kt
@@ -221,6 +221,10 @@
         project.tasks.withType(KotlinCompile::class.java).configureEach { task ->
             task.kotlinOptions.jvmTarget = "1.8"
             project.configureJavaCompilationWarnings(task)
+
+            // Not directly impacting us, but a bunch of issues like KT-46512, probably prudent
+            // for us to just disable until Kotlin 1.5.10+ to avoid end users hitting users
+            task.kotlinOptions.freeCompilerArgs += listOf("-Xsam-conversions=class")
         }
         project.afterEvaluate {
             val isAndroidProject = project.plugins.hasPlugin(LibraryPlugin::class.java) ||
diff --git a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
index dd6364c..17becd1 100644
--- a/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
@@ -111,7 +111,7 @@
     val SLICE_BENCHMARK = Version("1.1.0-alpha02")
     val SLICE_BUILDERS_KTX = Version("1.0.0-alpha08")
     val SLICE_REMOTECALLBACK = Version("1.0.0-alpha01")
-    val SLIDINGPANELAYOUT = Version("1.2.0-alpha03")
+    val SLIDINGPANELAYOUT = Version("1.2.0-alpha04")
     val STARTUP = Version("1.2.0-alpha01")
     val SQLITE = Version("2.2.0-alpha03")
     val SQLITE_INSPECTOR = Version("2.1.0-alpha01")
diff --git a/buildSrc/src/main/kotlin/androidx/build/docs/AndroidXDocsPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/docs/AndroidXDocsPlugin.kt
index ede9cd3..8373004 100644
--- a/buildSrc/src/main/kotlin/androidx/build/docs/AndroidXDocsPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/docs/AndroidXDocsPlugin.kt
@@ -614,6 +614,10 @@
 private val hiddenPackagesJava = setOf(
     "androidx.compose.animation",
     "androidx.compose.animation.core",
+    "androidx.compose.animation.graphics",
+    "androidx.compose.animation.graphics.res",
+    "androidx.compose.animation.graphics.vector",
+    "androidx.compose.animation.graphics.vector.compat",
     "androidx.compose.foundation",
     "androidx.compose.foundation.gestures",
     "androidx.compose.foundation.interaction",
@@ -679,4 +683,11 @@
     "androidx.compose.ui.util",
     "androidx.compose.ui.viewinterop",
     "androidx.compose.ui.window",
+    "androidx.activity.compose",
+    "androidx.hilt.navigation.compose",
+    "androidx.navigation.compose",
+    "androidx.paging.compose",
+    "androidx.wear.compose",
+    "androidx.wear.compose.foundation",
+    "androidx.wear.compose.material",
 )
diff --git a/busytown/androidx-studio-integration.sh b/busytown/androidx-studio-integration.sh
index 1e5c319..5ba70ad 100755
--- a/busytown/androidx-studio-integration.sh
+++ b/busytown/androidx-studio-integration.sh
@@ -1,5 +1,4 @@
 set -e
 SCRIPT_PATH="$(cd $(dirname $0) && pwd)"
 
-# runErrorProne is disabled due to I77d9800990e2a46648f7ed2713c54398cd798a0d in AGP
-$SCRIPT_PATH/impl/build-studio-and-androidx.sh -Pandroidx.summarizeStderr --no-daemon -Pandroidx.allWarningsAsErrors listTaskOutputs bOS -Pandroidx.verifyUpToDate -x verifyDependencyVersions -x runErrorProne --stacktrace
+$SCRIPT_PATH/impl/build-studio-and-androidx.sh -Pandroidx.summarizeStderr --no-daemon -Pandroidx.allWarningsAsErrors listTaskOutputs bOS -Pandroidx.verifyUpToDate -x verifyDependencyVersions --stacktrace
diff --git a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
index b231ccb..3e74c77 100644
--- a/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
+++ b/camera/camera-extensions/src/main/java/androidx/camera/extensions/ExtensionsManager.java
@@ -178,6 +178,15 @@
                                 + "are missed in the vendor library. " + e);
                         completer.set(getOrCreateExtensionsManager(
                                 ExtensionsAvailability.LIBRARY_UNAVAILABLE_MISSING_IMPLEMENTATION));
+                    } catch (RuntimeException e) {
+                        // Catches all unexpected runtime exceptions and still returns an
+                        // ExtensionsManager instance which performs default behavior.
+                        Logger.e(TAG,
+                                "Failed to initialize extensions. Something wents wrong when "
+                                        + "initializing the vendor library. "
+                                        + e);
+                        completer.set(getOrCreateExtensionsManager(
+                                ExtensionsAvailability.LIBRARY_UNAVAILABLE_ERROR_LOADING));
                     }
 
                     return "Initialize extensions";
diff --git a/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/PlacesCarAppService.java b/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/PlacesCarAppService.java
index 0d31407..044338a 100644
--- a/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/PlacesCarAppService.java
+++ b/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/PlacesCarAppService.java
@@ -16,12 +16,15 @@
 
 package androidx.car.app.sample.places.common;
 
+import android.Manifest;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 
 import androidx.annotation.NonNull;
 import androidx.car.app.CarAppService;
 import androidx.car.app.Screen;
+import androidx.car.app.ScreenManager;
 import androidx.car.app.Session;
 import androidx.car.app.validation.HostValidator;
 
@@ -40,7 +43,16 @@
             @Override
             @NonNull
             public Screen onCreateScreen(@NonNull Intent intent) {
-                return PlaceCategoryListScreen.create(getCarContext());
+                if (getCarContext().checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION)
+                        == PackageManager.PERMISSION_GRANTED) {
+                    return PlaceCategoryListScreen.create(getCarContext());
+                }
+
+                // If we do not have the location permission, show the request permission screen.
+                ScreenManager screenManager = getCarContext().getCarService(ScreenManager.class);
+                screenManager
+                        .push(PlaceCategoryListScreen.create(getCarContext()));
+                return new RequestPermissionScreen(getCarContext(), () -> screenManager.pop());
             }
         };
     }
diff --git a/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/RequestPermissionScreen.java b/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/RequestPermissionScreen.java
new file mode 100644
index 0000000..1a96701
--- /dev/null
+++ b/car/app/app-samples/places/common/src/main/java/androidx/car/app/sample/places/common/RequestPermissionScreen.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2021 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.car.app.sample.places.common;
+
+import static android.Manifest.permission.ACCESS_FINE_LOCATION;
+
+import androidx.annotation.NonNull;
+import androidx.car.app.CarContext;
+import androidx.car.app.CarToast;
+import androidx.car.app.Screen;
+import androidx.car.app.model.Action;
+import androidx.car.app.model.CarColor;
+import androidx.car.app.model.MessageTemplate;
+import androidx.car.app.model.OnClickListener;
+import androidx.car.app.model.ParkedOnlyOnClickListener;
+import androidx.car.app.model.Template;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** Screen for asking the user to grant location permission. */
+public class RequestPermissionScreen extends Screen {
+
+    /** Callback called when the location permission is granted. */
+    public interface LocationPermissionCheckCallback {
+        /** Callback called when the location permission is granted. */
+        void onPermissionGranted();
+    }
+
+    LocationPermissionCheckCallback mLocationPermissionCheckCallback;
+
+    public RequestPermissionScreen(
+            @NonNull CarContext carContext, @NonNull LocationPermissionCheckCallback callback) {
+        super(carContext);
+        mLocationPermissionCheckCallback = callback;
+    }
+
+    @NonNull
+    @Override
+    public Template onGetTemplate() {
+        List<String> permissions = new ArrayList<>();
+        permissions.add(ACCESS_FINE_LOCATION);
+
+        String message = "This app needs access to location in order to show the map around you";
+
+        OnClickListener listener = ParkedOnlyOnClickListener.create(() ->
+                getCarContext().requestPermissions(
+                        permissions,
+                        (approved, rejected) -> {
+                            CarToast.makeText(
+                                    getCarContext(),
+                                    String.format("Approved: %s Rejected: %s", approved, rejected),
+                                    CarToast.LENGTH_LONG).show();
+                            if (!approved.isEmpty()) {
+                                mLocationPermissionCheckCallback.onPermissionGranted();
+                                finish();
+                            }
+                        }));
+
+        Action action = new Action.Builder()
+                .setTitle("Grant Access")
+                .setBackgroundColor(CarColor.GREEN)
+                .setOnClickListener(listener)
+                .build();
+
+        return new MessageTemplate.Builder(message).addAction(action).setHeaderAction(
+                Action.APP_ICON).build();
+    }
+}
diff --git a/car/app/app/src/main/java/androidx/car/app/hardware/CarHardwareManager.java b/car/app/app/src/main/java/androidx/car/app/hardware/CarHardwareManager.java
index 59d9f3f..dbb14bf7 100644
--- a/car/app/app/src/main/java/androidx/car/app/hardware/CarHardwareManager.java
+++ b/car/app/app/src/main/java/androidx/car/app/hardware/CarHardwareManager.java
@@ -24,10 +24,12 @@
 import androidx.annotation.RestrictTo;
 import androidx.car.app.CarContext;
 import androidx.car.app.HostDispatcher;
+import androidx.car.app.HostException;
 import androidx.car.app.annotations.RequiresCarApi;
 import androidx.car.app.hardware.info.CarInfo;
 import androidx.car.app.hardware.info.CarSensors;
 import androidx.car.app.managers.Manager;
+import androidx.car.app.versioning.CarAppApiLevels;
 
 import java.lang.reflect.Constructor;
 
@@ -59,13 +61,20 @@
      *
      * @throws IllegalStateException if none of the supported classes are found or if a supported
      *                               class was found but the constructor was mismatched
+     * @throws HostException         if the negotiated api level is less than
+     *                               {@link CarAppApiLevels#LEVEL_3}
      * @hide
      */
     @RestrictTo(LIBRARY)
     @NonNull
     static CarHardwareManager create(@NonNull CarContext context,
-            @NonNull HostDispatcher hostDispatcher) throws IllegalStateException {
-        // TODO(b/192493839) : Switch to using Manager.create
+            @NonNull HostDispatcher hostDispatcher) {
+        if (context.getCarAppApiLevel() < CarAppApiLevels.LEVEL_3) {
+            throw new HostException("Create CarHardwareManager failed",
+                    new IllegalArgumentException("Attempted to retrieve CarHardwareManager "
+                            + "service, but the host is less than " + CarAppApiLevels.LEVEL_3));
+        }
+
         try { // Check for automotive library first.
             Class<?> c = Class.forName("androidx.car.app.hardware.AutomotiveCarHardwareManager");
             Constructor<?> ctor = c.getConstructor(Context.class);
@@ -78,7 +87,7 @@
             throw new IllegalStateException("Mismatch with app-automotive artifact", e);
         }
 
-        try { // Check for automotive library first.
+        try { // Check for projected library.
             Class<?> c = Class.forName("androidx.car.app.hardware.ProjectedCarHardwareManager");
             Constructor<?> ctor = c.getConstructor(HostDispatcher.class);
             Object object = ctor.newInstance(hostDispatcher);
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
index 74e3053..cf481a3 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/IdentityArrayMap.kt
@@ -97,9 +97,10 @@
                 startIndex = index + 1,
                 endIndex = size
             )
-            keys[size] = null
-            values[size] = null
-            this.size = size - 1
+            val newSize = size - 1
+            keys[newSize] = null
+            values[newSize] = null
+            this.size = newSize
             return true
         }
         return false
diff --git a/compose/runtime/runtime/src/test/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt b/compose/runtime/runtime/src/test/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
index b4f9bec..f615fb9 100644
--- a/compose/runtime/runtime/src/test/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
+++ b/compose/runtime/runtime/src/test/kotlin/androidx/compose/runtime/collection/IdentityArrayMapTests.kt
@@ -105,4 +105,19 @@
             }
         }
     }
+
+    @Test // b/195621739
+    fun canRemoveWhenFull() {
+        val map = IdentityArrayMap<Key, String>()
+        repeat(16) {
+            map[keys[it]] = it.toString()
+        }
+        repeat(16) {
+            val key = keys[it]
+            val removed = map.remove(key)
+            assertTrue(removed)
+            assertFalse(map.contains(key))
+        }
+        assertTrue(map.isEmpty())
+    }
 }
\ No newline at end of file
diff --git a/core/OWNERS b/core/OWNERS
index 37b3e14..cb02012 100644
--- a/core/OWNERS
+++ b/core/OWNERS
@@ -1,4 +1,5 @@
 # Bug component: 460834
+alanv@google.com
 aurimas@google.com
 cinek@google.com
 clarabayarri@google.com
diff --git a/development/build_log_simplifier/messages.ignore b/development/build_log_simplifier/messages.ignore
index bb040f9..f2684a0 100644
--- a/development/build_log_simplifier/messages.ignore
+++ b/development/build_log_simplifier/messages.ignore
@@ -523,6 +523,8 @@
 @param bounds,
 \@param defaultPolicy
 @param complicationTapFilter
+in DClass UserStyle
+@param copySelectedOptions
 in DClass Builder
 Did you make a typo\? Are you trying to refer to something not visible to users\?
 # Wire proto generation, task :generateDebugProtos
diff --git a/development/update_studio.sh b/development/update_studio.sh
index 668e2b8..e4d192c 100755
--- a/development/update_studio.sh
+++ b/development/update_studio.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 # Get versions
-AGP_VERSION=${1:-7.1.0-alpha06}
-STUDIO_VERSION_STRING=${2:-"Android Studio Bumblebee (2021.1.1) Canary 6"}
+AGP_VERSION=${1:-7.1.0-alpha07}
+STUDIO_VERSION_STRING=${2:-"Android Studio Bumblebee (2021.1.1) Canary 7"}
 STUDIO_IFRAME_LINK=`curl "https://developer.android.com/studio/archive.html" | grep iframe | sed "s/.*src=\"\([a-zA-Z0-9\/\._]*\)\".*/https:\/\/android-dot-devsite-v2-prod.appspot.com\1/g"`
 STUDIO_LINK=`curl -s $STUDIO_IFRAME_LINK | grep -C30 "$STUDIO_VERSION_STRING" | grep Linux | tail -n 1 | sed 's/.*a href="\(.*\).*"/\1/g'`
 STUDIO_VERSION=`echo $STUDIO_LINK | sed "s/.*ide-zips\/\(.*\)\/android-studio-.*/\1/g"`
@@ -37,7 +37,7 @@
     ./development/importMaven/import_maven_artifacts.py -n "com.android.tools.utp:$ARTIFACT:$ADT_VERSION"
   done
 
-ATP_VERSION=${4:-0.0.8-alpha07}
+ATP_VERSION=${4:-0.0.8-alpha06}
 ./development/importMaven/import_maven_artifacts.py -n "com.google.testing.platform:android-test-plugin:$ATP_VERSION"
 ./development/importMaven/import_maven_artifacts.py -n "com.google.testing.platform:launcher:$ATP_VERSION"
 ./development/importMaven/import_maven_artifacts.py -n "com.google.testing.platform:android-driver-instrumentation:$ATP_VERSION"
diff --git a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionImplementation.java b/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionImplementation.java
deleted file mode 100644
index c0b7a72..0000000
--- a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionImplementation.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2021 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.emoji2.benchmark.reflection;
-
-import java.lang.invoke.MethodHandle;
-import java.lang.invoke.MethodHandles;
-import java.lang.reflect.Method;
-
-public class ReflectionImplementation extends ReflectionParent {
-    @Override
-    public ReflectionParent actualCall() {
-        return super.actualCall();
-    }
-
-    ReflectionParent staticActualCall() throws Throwable {
-        return ParentMethodHandles.staticCall(this);
-    }
-
-    MethodHandle doMethodLookup() throws NoSuchMethodException, IllegalAccessException {
-        return ParentMethodHandles.doMethodLookup();
-    }
-
-    private static class ParentMethodHandles {
-        private static final MethodHandle sMethodHandle;
-
-        static {
-            MethodHandle sMethodHandle1 = null;
-            try {
-                sMethodHandle1 = doMethodLookup();
-            } catch (Throwable ignored) { }
-            sMethodHandle = sMethodHandle1;
-        }
-
-        private static MethodHandle doMethodLookup() throws IllegalAccessException,
-                NoSuchMethodException {
-            MethodHandles.Lookup lookup = MethodHandles.lookup().in(ReflectionParent.class);
-            Method method = ReflectionParent.class.getDeclaredMethod("actualCall");
-            method.setAccessible(true);
-            return lookup.unreflectSpecial(method, ReflectionParent.class);
-        }
-
-        public static ReflectionParent staticCall(ReflectionImplementation reflectionImplementation)
-                throws Throwable {
-            return (ReflectionParent) sMethodHandle.bindTo(reflectionImplementation)
-                    .invokeWithArguments();
-        }
-    }
-
-}
diff --git a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionParent.java b/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionParent.java
deleted file mode 100644
index d297463..0000000
--- a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionParent.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright 2021 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.emoji2.benchmark.reflection;
-
-public class ReflectionParent {
-    public ReflectionParent actualCall() {
-        return this;
-    }
-}
diff --git a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionsBenchmark.java b/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionsBenchmark.java
deleted file mode 100644
index c9e59fa..0000000
--- a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/reflection/ReflectionsBenchmark.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright 2021 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.emoji2.benchmark.reflection;
-
-import static org.junit.Assert.assertNotNull;
-
-import androidx.benchmark.BenchmarkState;
-import androidx.benchmark.junit4.BenchmarkRule;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
-import androidx.test.filters.LargeTest;
-
-import org.junit.Rule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.lang.invoke.MethodHandle;
-
-@RunWith(AndroidJUnit4.class)
-@LargeTest
-public class ReflectionsBenchmark {
-    @Rule
-    public BenchmarkRule benchmarkRule = new BenchmarkRule();
-
-    @Test
-    public void static_methodHandle() throws Throwable {
-        BenchmarkState state = benchmarkRule.getState();
-        ReflectionImplementation subject = new ReflectionImplementation();
-        ReflectionParent result = null;
-        while (state.keepRunning()) {
-            result = subject.staticActualCall();
-        }
-        assertNotNull(result);
-    }
-
-    @Test
-    public void regularJavaDispatch() {
-        BenchmarkState state = benchmarkRule.getState();
-        ReflectionImplementation subject = new ReflectionImplementation();
-        ReflectionParent result = null;
-        while (state.keepRunning()) {
-            result = subject.actualCall();
-        }
-        assertNotNull(result);
-    }
-
-    /**
-     * This test is not an accurate reflection of first lookup cost, as it will warm up caches
-     * before the main benchmark starts.
-     *
-     * However, it is a good _lower bound_ of the cost to do this lookup, with the assumption
-     * that real world lookups will always be the same cost or slower.
-     */
-    @Test
-    public void doWarmedUpMethodLookup() throws NoSuchMethodException, IllegalAccessException {
-        BenchmarkState state = benchmarkRule.getState();
-        ReflectionImplementation subject = new ReflectionImplementation();
-        MethodHandle result = null;
-        while (state.keepRunning()) {
-            result = subject.doMethodLookup();
-        }
-        assertNotNull(result);
-    }
-}
diff --git a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/text/NoFontTestEmojiConfig.java b/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/text/NoFontTestEmojiConfig.java
index f706f84..67ad432 100644
--- a/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/text/NoFontTestEmojiConfig.java
+++ b/emoji2/emoji2-benchmark/src/androidTest/java/androidx/emoji2/benchmark/text/NoFontTestEmojiConfig.java
@@ -21,9 +21,11 @@
 import android.graphics.Typeface;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
 import androidx.emoji2.text.EmojiCompat;
 import androidx.emoji2.text.MetadataRepo;
 
+@RequiresApi(19)
 public class NoFontTestEmojiConfig extends EmojiCompat.Config {
 
     static EmojiCompat.Config emptyConfig() {
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 45e5b4e..7adf9d4 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,13 +2,13 @@
 # -----------------------------------------------------------------------------
 # All of the following should be updated in sync.
 # -----------------------------------------------------------------------------
-androidGradlePlugin = "7.1.0-alpha06"
+androidGradlePlugin = "7.1.0-alpha07"
 # NOTE: When updating the lint version we also need to update the `api` version
 # supported by `IssueRegistry`'s.' For e.g. r.android.com/1331903
-androidLint = "30.1.0-alpha06"
+androidLint = "30.1.0-alpha07"
 # Once you have a chosen version of AGP to upgrade to, go to
 # https://developer.android.com/studio/archive and find the matching version of Studio.
-androidStudio = "2021.1.1.6"
+androidStudio = "2021.1.1.7"
 # -----------------------------------------------------------------------------
 
 androidLintMin = "27.2.1"
diff --git a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
index 1f308a1..590e787 100644
--- a/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
+++ b/recyclerview/recyclerview/src/androidTest/java/androidx/recyclerview/widget/RecyclerViewLayoutTest.java
@@ -1880,6 +1880,7 @@
         scrollInOtherOrientationTest(FLAG_VERTICAL | FLAG_FLING);
     }
 
+    @FlakyTest(bugId = 195936088)
     @SuppressWarnings("WrongConstant")
     @Test
     public void nestedDragVertical() throws Throwable {
diff --git a/room/room-compiler/build.gradle b/room/room-compiler/build.gradle
index d2b5199..10e2f25 100644
--- a/room/room-compiler/build.gradle
+++ b/room/room-compiler/build.gradle
@@ -19,7 +19,8 @@
 import androidx.build.LibraryType
 import androidx.build.SupportConfig
 import androidx.build.SdkHelperKt
-import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation
+import java.util.zip.ZipEntry
+import java.util.zip.ZipFile
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
@@ -61,6 +62,8 @@
         exclude(dependency("org.glassfish:.*"))
         exclude(dependency("com.ibm.icu:.*"))
     }
+    relocate("org.antlr", "androidx.room.jarjarred.org.antlr")
+    relocate("org.stringtemplate", "androidx.room.jarjarred.org.stringtemplate")
 }
 
 jar {
@@ -70,14 +73,6 @@
     archiveClassifier = "before-jarjar"
 }
 
-// relocate all shadow dependencies
-task relocateShadowJar(type: ConfigureShadowRelocation) {
-    target = tasks.shadowJar
-    prefix = "androidx.room.jarjarred"
-}
-
-tasks.shadowJar.dependsOn(tasks.relocateShadowJar)
-
 configurations {
     // replace the standard jar with the one built by 'shadowJar' in both api and runtime variants
     apiElements.outgoing.artifacts.clear()
@@ -166,17 +161,27 @@
      * their location.
      */
     def validateJarContents(File jarFile) {
-        FileTree jarFiles = project.zipTree(jarFile)
-        def found = false
-        jarFiles.files.each {
-            if (it.path.contains("/org/antlr")) {
-                found = true
-                if (!it.path.contains("androidx/room/jarjarred/org/antlr")) {
-                    throw new GradleException("Any Antlr class included in the Room Compiler's" +
-                            " jar file should be moved into androidx/room/jarjarred.\n" +
-                            "Looks like $it has not been moved")
+        Boolean found = false
+        ZipFile zip = new ZipFile(jarFile)
+        try {
+            for (Enumeration list = zip.entries(); list.hasMoreElements(); ) {
+                String entry = ((ZipEntry) list.nextElement()).name
+                if (!entry.endsWith(".class")) continue
+                if (entry.contains("org/antlr")) {
+                    found = true
+                    if (!entry.contains("androidx/room/jarjarred/org/antlr")) {
+                        throw new GradleException("Any Antlr class included in the Room Compiler's" +
+                                " jar file should be moved into androidx/room/jarjarred.\n" +
+                                "Looks like $entry has not been moved")
+                    }
+                }
+                if (!entry.startsWith("androidx/room/") && !entry.startsWith("Jdbc_extKt")) {
+                    throw new GradleException("Found a class that is not in androidx.room " +
+                            "package: $entry")
                 }
             }
+        } finally {
+            zip.close()
         }
         if (!found) {
             throw new GradleException("Couldn't find any Antlr classes in room-compiler artifact" +
diff --git a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
index 0b2d513..4420a8b 100644
--- a/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
+++ b/room/room-paging/src/androidTest/kotlin/androidx/room/paging/LimitOffsetPagingSourceTest.kt
@@ -29,6 +29,7 @@
 import androidx.room.util.CursorUtil
 import androidx.test.core.app.ApplicationProvider
 import androidx.test.ext.junit.runners.AndroidJUnit4
+import androidx.test.filters.FlakyTest
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import kotlinx.coroutines.runBlocking
@@ -161,6 +162,7 @@
         }
     }
 
+    @FlakyTest(bugId = 195794422)
     @Test
     fun load_initialEmptyLoad() {
         val pagingSource = LimitOffsetPagingSourceImpl(database)
diff --git a/security/security-crypto/api/current.ignore b/security/security-crypto/api/current.ignore
new file mode 100644
index 0000000..5cadc4b
--- /dev/null
+++ b/security/security-crypto/api/current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedThrows: androidx.security.crypto.EncryptedFile#openFileInput():
+    Method androidx.security.crypto.EncryptedFile.openFileInput added thrown exception java.io.FileNotFoundException
diff --git a/security/security-crypto/api/current.txt b/security/security-crypto/api/current.txt
index 5ce7749..5ac2ea1 100644
--- a/security/security-crypto/api/current.txt
+++ b/security/security-crypto/api/current.txt
@@ -2,7 +2,7 @@
 package androidx.security.crypto {
 
   public final class EncryptedFile {
-    method public java.io.FileInputStream openFileInput() throws java.security.GeneralSecurityException, java.io.IOException;
+    method public java.io.FileInputStream openFileInput() throws java.io.FileNotFoundException, java.security.GeneralSecurityException, java.io.IOException;
     method public java.io.FileOutputStream openFileOutput() throws java.security.GeneralSecurityException, java.io.IOException;
   }
 
diff --git a/security/security-crypto/api/public_plus_experimental_current.txt b/security/security-crypto/api/public_plus_experimental_current.txt
index 5ce7749..5ac2ea1 100644
--- a/security/security-crypto/api/public_plus_experimental_current.txt
+++ b/security/security-crypto/api/public_plus_experimental_current.txt
@@ -2,7 +2,7 @@
 package androidx.security.crypto {
 
   public final class EncryptedFile {
-    method public java.io.FileInputStream openFileInput() throws java.security.GeneralSecurityException, java.io.IOException;
+    method public java.io.FileInputStream openFileInput() throws java.io.FileNotFoundException, java.security.GeneralSecurityException, java.io.IOException;
     method public java.io.FileOutputStream openFileOutput() throws java.security.GeneralSecurityException, java.io.IOException;
   }
 
diff --git a/security/security-crypto/api/restricted_current.ignore b/security/security-crypto/api/restricted_current.ignore
new file mode 100644
index 0000000..5cadc4b
--- /dev/null
+++ b/security/security-crypto/api/restricted_current.ignore
@@ -0,0 +1,3 @@
+// Baseline format: 1.0
+ChangedThrows: androidx.security.crypto.EncryptedFile#openFileInput():
+    Method androidx.security.crypto.EncryptedFile.openFileInput added thrown exception java.io.FileNotFoundException
diff --git a/security/security-crypto/api/restricted_current.txt b/security/security-crypto/api/restricted_current.txt
index 5ce7749..5ac2ea1 100644
--- a/security/security-crypto/api/restricted_current.txt
+++ b/security/security-crypto/api/restricted_current.txt
@@ -2,7 +2,7 @@
 package androidx.security.crypto {
 
   public final class EncryptedFile {
-    method public java.io.FileInputStream openFileInput() throws java.security.GeneralSecurityException, java.io.IOException;
+    method public java.io.FileInputStream openFileInput() throws java.io.FileNotFoundException, java.security.GeneralSecurityException, java.io.IOException;
     method public java.io.FileOutputStream openFileOutput() throws java.security.GeneralSecurityException, java.io.IOException;
   }
 
diff --git a/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java b/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
index b08a7bf..e2ed7a5 100644
--- a/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
+++ b/security/security-crypto/src/androidTest/java/androidx/security/crypto/EncryptedFileTest.java
@@ -18,6 +18,9 @@
 
 import static androidx.security.crypto.MasterKey.KEYSTORE_PATH_URI;
 
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import static java.nio.charset.StandardCharsets.UTF_8;
 
 import android.content.Context;
@@ -41,6 +44,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -102,7 +106,7 @@
 
         EncryptedFile encryptedFile = new EncryptedFile.Builder(mContext,
                 new File(mContext.getFilesDir(),
-                fileName), mMasterKey,
+                        fileName), mMasterKey,
                 EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
                 .build();
 
@@ -152,7 +156,7 @@
         } catch (IOException ex) {
             inputFailed = true;
         }
-        Assert.assertTrue("File should have failed opening.", inputFailed);
+        assertTrue("File should have failed opening.", inputFailed);
 
         EncryptedFile existingFileOutputCheck = new EncryptedFile.Builder(mContext,
                 new File(mContext.getFilesDir(), fileName), mMasterKey,
@@ -164,7 +168,7 @@
         } catch (IOException ex) {
             outputFailed = true;
         }
-        Assert.assertTrue("File should have failed writing.", outputFailed);
+        assertTrue("File should have failed writing.", outputFailed);
 
     }
 
@@ -177,7 +181,7 @@
         // Write
 
         EncryptedFile encryptedFile = new EncryptedFile.Builder(new File(mContext.getFilesDir(),
-                        fileName), mContext, mMasterKey.getKeyAlias(),
+                fileName), mContext, mMasterKey.getKeyAlias(),
                 EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
                 .build();
 
@@ -227,7 +231,7 @@
         } catch (IOException ex) {
             inputFailed = true;
         }
-        Assert.assertTrue("File should have failed opening.", inputFailed);
+        assertTrue("File should have failed opening.", inputFailed);
 
         EncryptedFile existingFileOutputCheck = new EncryptedFile.Builder(
                 new File(mContext.getFilesDir(), fileName), mContext, mMasterKey.getKeyAlias(),
@@ -239,8 +243,28 @@
         } catch (IOException ex) {
             outputFailed = true;
         }
-        Assert.assertTrue("File should have failed writing.", outputFailed);
+        assertTrue("File should have failed writing.", outputFailed);
+    }
 
+    @Test
+    public void testReadNonExistingFileThrows() throws Exception {
+        final File nonExisting = new File(mContext.getFilesDir(), "non-existing.data");
+        if (nonExisting.exists()) {
+            assertTrue(nonExisting.delete());
+        }
+        EncryptedFile encryptedFile = new EncryptedFile.Builder(
+                mContext,
+                nonExisting,
+                mMasterKey,
+                EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
+                .build();
+
+        try {
+            FileInputStream stream = encryptedFile.openFileInput();
+            fail("Successfully opened file that should not exist");
+        } catch (FileNotFoundException fnf) {
+            // Pass
+        }
     }
 
     @Test
@@ -251,7 +275,7 @@
         // Write
         EncryptedFile encryptedFile = new EncryptedFile.Builder(mContext,
                 new File(mContext.getFilesDir(),
-                fileName), mMasterKey,
+                        fileName), mMasterKey,
                 EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB)
                 .setKeysetAlias("CustomKEYALIAS")
                 .setKeysetPrefName("CUSTOMPREFNAME")
@@ -295,7 +319,7 @@
         SharedPreferences sharedPreferences = mContext.getSharedPreferences("CUSTOMPREFNAME",
                 Context.MODE_PRIVATE);
         boolean containsKeyset = sharedPreferences.contains("CustomKEYALIAS");
-        Assert.assertTrue("Keyset should have existed.", containsKeyset);
+        assertTrue("Keyset should have existed.", containsKeyset);
     }
 
     @SuppressWarnings("deprecation")
diff --git a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
index fce4770..6b0bd91 100644
--- a/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
+++ b/security/security-crypto/src/main/java/androidx/security/crypto/EncryptedFile.java
@@ -35,6 +35,7 @@
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -238,13 +239,14 @@
      *
      * @return The input stream to read previously encrypted data.
      * @throws GeneralSecurityException when a bad master key or keyset has been used
-     * @throws IOException              when the file was not found
+     * @throws FileNotFoundException    when the file was not found
+     * @throws IOException              when other I/O errors occur
      */
     @NonNull
     public FileInputStream openFileInput()
-            throws GeneralSecurityException, IOException {
+            throws GeneralSecurityException, IOException, FileNotFoundException {
         if (!mFile.exists()) {
-            throw new IOException("file doesn't exist: " + mFile.getName());
+            throw new FileNotFoundException("file doesn't exist: " + mFile.getName());
         }
         FileInputStream fileInputStream = new FileInputStream(mFile);
         InputStream decryptingStream = mStreamingAead.newDecryptingStream(fileInputStream,
diff --git a/wear/wear-watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt b/wear/wear-watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
index 73d7f12..dc33854d 100644
--- a/wear/wear-watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
+++ b/wear/wear-watchface-client-guava/src/main/java/androidx/wear/watchface/client/ListenableWatchFaceControlClient.kt
@@ -87,9 +87,8 @@
 
         /**
          * Returns a [ListenableFuture] for a [ListenableWatchFaceControlClient] which attempts to
-         * connect to a watch face in the android package [watchFacePackageName].
-         * Resolves as [ServiceNotBoundException] if the watch face control service can not
-         * be bound.
+         * connect to a watch face in the android package [watchFacePackageName]. Resolves as
+         * [ServiceNotBoundException] if the watch face control service can not be bound.
          *
          * Note the returned future may resolve immediately on the calling thread or it may resolve
          * asynchronously when the service is connected on a background thread.
@@ -135,6 +134,15 @@
      * [ListenableFuture] wrapper around
      * [WatchFaceControlClient.getOrCreateInteractiveWatchFaceClient].
      * This is open to allow mocking.
+     *
+     * @param id The Id of the interactive instance to get or create.
+     * @param deviceConfig The [DeviceConfig] of the interactive instance (only used when creating)
+     * @param watchUiState The initial [WatchUiState] for the wearable.
+     * @param userStyle Optional [UserStyleData] to apply to the instance (whether or not it's
+     * created). If `null` then the pre-existing user style is preserved (if the instance is created
+     * this will be the [androidx.wear.watchface.style.UserStyleSchema]'s default).
+     * @param slotIdToComplicationData The initial [androidx.wear.watchface.ComplicationSlot] data,
+     * or `null` if unavailable.
      */
     public open fun listenableGetOrCreateInteractiveWatchFaceClient(
         id: String,
diff --git a/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt b/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
index 9396ed3..d14f5f1 100644
--- a/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
+++ b/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/InteractiveWatchFaceClient.kt
@@ -126,6 +126,8 @@
     /**
      * Returns the ID of the [androidx.wear.watchface.ComplicationSlot] at the given coordinates or
      * `null` if there isn't one.
+     *
+     * Note this currently doesn't support Edge complications.
      */
     @SuppressWarnings("AutoBoxing")
     @Throws(RemoteException::class)
diff --git a/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt b/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
index 2c7812b..6e441c9 100644
--- a/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
+++ b/wear/wear-watchface-client/src/main/java/androidx/wear/watchface/client/WatchFaceControlClient.kt
@@ -38,7 +38,6 @@
 import androidx.wear.watchface.control.data.WallpaperInteractiveWatchFaceInstanceParams
 import androidx.wear.watchface.data.IdAndComplicationDataWireFormat
 import androidx.wear.watchface.data.WatchUiState
-import androidx.wear.watchface.style.UserStyle
 import androidx.wear.watchface.style.UserStyleData
 import androidx.wear.watchface.style.data.UserStyleWireFormat
 import kotlinx.coroutines.CompletableDeferred
@@ -168,8 +167,9 @@
      * @param id The ID for the requested [InteractiveWatchFaceClient].
      * @param deviceConfig The [DeviceConfig] for the wearable.
      * @param watchUiState The initial [WatchUiState] for the wearable.
-     * @param userStyle The initial style map encoded as [UserStyleData] (see [UserStyle]), or
-     * `null` if the default should be used.
+     * @param userStyle Optional [UserStyleData] to apply to the instance (whether or not it's
+     * created). If `null` then the pre-existing user style is preserved (if the instance is created
+     * this will be the [androidx.wear.watchface.style.UserStyleSchema]'s default).
      * @param slotIdToComplicationData The initial [androidx.wear.watchface.ComplicationSlot] data,
      * or `null` if unavailable.
      * @return The [InteractiveWatchFaceClient], this should be closed when finished.
diff --git a/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationDrawable.kt b/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationDrawable.kt
index bdbf5aa..d90af48 100644
--- a/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationDrawable.kt
+++ b/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationDrawable.kt
@@ -192,10 +192,10 @@
     internal var complicationRenderer: ComplicationRenderer? = null
         private set
 
-    /** Returns complication style for active mode.  */
+    /** Returns complication style for active mode. */
     public val activeStyle: ComplicationStyle
 
-    /** Returns complication style for ambient mode.  */
+    /** Returns complication style for ambient mode. */
     public val ambientStyle: ComplicationStyle
 
     private val mainThreadHandler = Handler(Looper.getMainLooper())
@@ -206,17 +206,17 @@
     private val rendererInvalidateListener = OnInvalidateListener { invalidateSelf() }
 
     /**
-     * The time in milliseconds since the epoch used for rendering [ComplicationData]
-     * with time dependent text.
+     * The time in milliseconds since the epoch used for rendering [ComplicationData] with time
+     * dependent text.
      */
     public var currentTimeMillis: Long = 0
 
-    /** Whether the complication is rendered in ambient mode.  */
+    /** Whether the complication is rendered in ambient mode. */
     public var isInAmbientMode: Boolean = false
 
     /**
-     * Whether the complication, when rendering in ambient mode, should apply a style
-     * suitable for low bit ambient mode.
+     * Whether the complication, when rendering in ambient mode, should apply a style suitable for
+     * low bit ambient mode.
      */
     public var isLowBitAmbient: Boolean = false
 
@@ -227,8 +227,8 @@
     public var isBurnInProtectionOn: Boolean = false
 
     /**
-     * Whether the complication is currently highlighted. This may be called by a watch face
-     * when a complication is tapped.
+     * Whether the complication is currently highlighted. This may be called by a watch face when
+     * a complication is tapped.
      *
      * If watch face is in ambient mode, highlight will not be visible even if this is set to
      * `true`, because it may cause burn-in or power inefficiency.
@@ -238,7 +238,7 @@
     private var isInflatedFromXml = false
     private var alreadyStyled = false
 
-    /** Default constructor.  */
+    /** Default constructor. */
     public constructor() {
         activeStyle = ComplicationStyle()
         ambientStyle = ComplicationStyle()
@@ -246,7 +246,9 @@
 
     /**
      * Creates a ComplicationDrawable using the given context. If this constructor is used, calling
-     * [.setContext] may not be necessary.
+     * [setContext] may not be necessary.
+     *
+     * @param context The [Context] used to render the complication.
      */
     public constructor(context: Context) : this() {
         setContext(context)
@@ -269,12 +271,12 @@
     }
 
     /**
-     * Sets the context used to render the complication. If a context is not set,
-     * ComplicationDrawable will throw an [IllegalStateException] if one of [draw], [setBounds],
-     * or [setComplicationData] is called.
+     * Sets the [Context] used to render the complication. If a context is not set,
+     * ComplicationDrawable will throw an [IllegalStateException] if one of [draw], [setBounds], or
+     * [setComplicationData] is called.
      *
      * While this can be called from any context, ideally, a
-     * androidx.wear.watchface.WatchFaceService object should be passed here to allow creating
+     * [androidx.wear.watchface.WatchFaceService] object should be passed here to allow creating
      * permission dialogs by the [onTap] method, in case current watch face doesn't have the
      * permission to receive complication data.
      *
@@ -282,8 +284,10 @@
      * be called before calling any of the methods mentioned above.
      *
      * If this ComplicationDrawable is not inflated from an XML file, this method will reset the
-     * style to match the default values, so if [ComplicationDrawable()] is used to construct a
-     * ComplicationDrawable, this method should be called right after.
+     * style to match the default values, so if ComplicationDrawable(drawable: ComplicationDrawable)
+     * is used to construct a ComplicationDrawable, this method should be called right after.
+     *
+     * @param context The [Context] used to render the complication.
      */
     public fun setContext(context: Context) {
         if (context == this.context) {
@@ -556,8 +560,8 @@
         }
 
     /**
-     * Sets the complication data to be drawn. If `complicationData` is `null`, nothing
-     * will be drawn when [draw] is called.
+     * Sets the complication data to be drawn. If `complicationData` is `null`, nothing will be
+     * drawn when [draw] is called.
      *
      * @param complicationData The [ComplicationData] to set
      * @param loadDrawablesAsync If true any drawables should be loaded asynchronously,
@@ -695,10 +699,10 @@
             "ComplicationDrawable does not have a context. Use setContext(Context) to set it first."
         }
     }
+
     /**
      * The text to be rendered when [ComplicationData] is of type [NO_DATA]. If `noDataText` is
-     * null, an empty text will be
-     * rendered.
+     * null, an empty text will be rendered.
      */
     public var noDataText: CharSequence? = null
         set(noDataText) {
@@ -724,7 +728,7 @@
             return drawable
         }
 
-        /** Sets the style to default values using resources.  */
+        /** Sets the style to default values using resources. */
         @JvmStatic
         internal fun setStyleToDefaultValues(style: ComplicationStyle, r: Resources) {
             style.backgroundColor = r.getColor(R.color.complicationDrawable_backgroundColor, null)
diff --git a/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java b/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
index 2c0dadd..868cee7 100644
--- a/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
+++ b/wear/wear-watchface-complications-rendering/src/main/java/androidx/wear/watchface/complications/rendering/ComplicationRenderer.java
@@ -174,7 +174,7 @@
     /**
      * Initializes complication renderer.
      *
-     * @param context      Current context.
+     * @param context      Current [Context].
      * @param activeStyle  ComplicationSlot style to be used when in active mode.
      * @param ambientStyle ComplicationSlot style to be used when in ambient mode.
      */
diff --git a/wear/wear-watchface-editor-guava/src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt b/wear/wear-watchface-editor-guava/src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt
index e746e76..0c30a81 100644
--- a/wear/wear-watchface-editor-guava/src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt
+++ b/wear/wear-watchface-editor-guava/src/main/java/androidx/wear/watchface/editor/ListenableEditorSession.kt
@@ -53,15 +53,15 @@
          *
          * If watch face editor takes more than 4s to create a watch face, returned future will be
          * resolved with [TimeoutCancellationException] exception.
+         *
+         * @param activity The [ComponentActivity] associated with the EditorSession.
+         * @param editIntent [Intent] sent by SysUI to launch the editing session.
          */
         @SuppressWarnings("ExecutorRegistration")
         @JvmStatic
         @UiThread
         public fun listenableCreateOnWatchEditorSession(
-            /** The [ComponentActivity] associated with the EditorSession. */
             activity: ComponentActivity,
-
-            /** [Intent] sent by SysUI to launch the editing session. */
             editIntent: Intent
         ): ListenableFuture<ListenableEditorSession?> {
             val result = ResolvableFuture.create<ListenableEditorSession?>()
@@ -85,17 +85,20 @@
             return result
         }
 
-        /** Constructs an [ListenableEditorSession] for a remote watch face editor. */
+        /**
+         * Constructs an [ListenableEditorSession] for a remote watch face editor.
+         *
+         * @param activity The [ComponentActivity] associated with the EditorSession.
+         * @param editIntent [Intent] sent by SysUI to launch the editing session.
+         * @param headlessWatchFaceClient The [HeadlessWatchFaceClient] that backs the constructed
+         * EditorSession.
+         */
         @JvmStatic
         @RequiresApi(27)
         @UiThread
         public fun createHeadlessEditorSession(
-            /** The [ComponentActivity] associated with the EditorSession. */
             activity: ComponentActivity,
-
-            /** [Intent] sent by SysUI to launch the editing session. */
             editIntent: Intent,
-
             headlessWatchFaceClient: HeadlessWatchFaceClient
         ): ListenableEditorSession = ListenableEditorSession(
             EditorSession.createHeadlessEditorSession(
diff --git a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
index 28be503..39ad69f 100644
--- a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
+++ b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/EditorSession.kt
@@ -82,10 +82,10 @@
  *
  * For EditorSessions backed by a headless instance (see [createHeadlessEditorSession] and
  * [EditorRequest.headlessDeviceConfig]), style changes are not applied to the interactive
- * instance and it's up to the system to apply them. For EditorSessions backed by an
- * interactive instance style changes are applied immediately. Its possible the system might fail to
- * persist the style changes (e.g. to data base write failure or a crash) and if this happens its
- * the responsibility of the system to revert the style change.
+ * instance and it's up to the system to apply them. For EditorSessions backed by an interactive
+ * instance style changes are applied immediately. Its possible the system might fail to persist
+ * the style changes (e.g. to data base write failure or a crash) and if this happens it's the
+ * responsibility of the system to revert the style change.
  */
 public interface EditorSession : AutoCloseable {
     /** The [ComponentName] of the watch face being edited. */
@@ -99,8 +99,10 @@
     @get:RequiresApi(Build.VERSION_CODES.R)
     public val watchFaceId: WatchFaceId
 
-    /** The current [UserStyle]. Assigning to this will cause the style to update. However, styling
-     * changes to the watch face will be reverted upon exit. */
+    /**
+     * The current [UserStyle]. Assigning to this will cause the style to update. However, styling
+     * changes to the watch face will be reverted upon exit.
+     */
     public var userStyle: UserStyle
 
     /** The UTC reference preview time for this watch face in milliseconds since the epoch. */
diff --git a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
index 2cd6547..1e95ae4 100644
--- a/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
+++ b/wear/wear-watchface-editor/src/main/java/androidx/wear/watchface/editor/WatchFaceEditorContract.kt
@@ -53,8 +53,7 @@
  * @param renderParameters The [RenderParameters] to use when rendering the screen shot
  * @param calendarTimeMillis The UTC time in milliseconds since the epoch to render with. If
  * [EditorSession.DEFAULT_PREVIEW_TIME_MILLIS] is passed then the watch face's default preview time
- * will be
- * used.
+ * will be used.
  */
 public class PreviewScreenshotParams(
     public val renderParameters: RenderParameters,
diff --git a/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt b/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
index 73891ce..cbe0b02 100644
--- a/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
+++ b/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/CurrentUserStyleRepository.kt
@@ -34,14 +34,11 @@
  * instance with [MutableUserStyle.toUserStyle].
  *
  * @param selectedOptions The [UserStyleSetting.Option] selected for each [UserStyleSetting]
+ * @param copySelectedOptions Whether to create a copy of the provided [selectedOptions]. If
+ * `false`, no mutable copy of the [selectedOptions] map should be retained outside this class.
  */
 public class UserStyle private constructor(
-    /** The selected option for each setting. */
     selectedOptions: Map<UserStyleSetting, UserStyleSetting.Option>,
-    /**
-     * Whether to create a copy of the provided [selectedOptions]. If false, no mutable copy of
-     * the [selectedOptions] map should be retained outside this class.
-     */
     copySelectedOptions: Boolean
 ) : Iterable<Map.Entry<UserStyleSetting, UserStyleSetting.Option>> {
     private val selectedOptions =
@@ -322,8 +319,7 @@
  * @param userStyleSettings The user configurable style categories associated with this watch face.
  * Empty if the watch face doesn't support user styling. Note we allow at most one
  * [UserStyleSetting.ComplicationSlotsUserStyleSetting] and one
- * [UserStyleSetting.CustomValueUserStyleSetting]
- * in the list.
+ * [UserStyleSetting.CustomValueUserStyleSetting] in the list.
  */
 public class UserStyleSchema(
     public val userStyleSettings: List<UserStyleSetting>
diff --git a/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt b/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
index 86c8c07..cca7fe4 100644
--- a/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
+++ b/wear/wear-watchface-style/src/main/java/androidx/wear/watchface/style/UserStyleSetting.kt
@@ -261,8 +261,8 @@
      * an arbitrary value depending on the nature of the style setting.
      *
      * @property id Machine readable [Id] for the style setting. Identifier for the option (or the
-     *     option itself for [CustomValueUserStyleSetting.CustomValueOption]), must be unique
-     *     within the UserStyleSetting. Short ids are encouraged.
+     * option itself for [CustomValueUserStyleSetting.CustomValueOption]), must be unique within
+     * the UserStyleSetting. Short ids are encouraged.
      */
     public abstract class Option(public val id: Id) {
         /**
@@ -278,6 +278,8 @@
         /**
          * Machine readable identifier for [Option]s. The length of this identifier may not exceed
          * [MAX_LENGTH].
+         *
+         * @param value The [ByteArray] value of this Id.
          */
         public class Id(public val value: ByteArray) {
             /**
@@ -482,9 +484,11 @@
         /** Returns the default value. */
         public fun getDefaultValue(): Boolean = (options[defaultOptionIndex] as BooleanOption).value
 
-        /** Represents a true or false option in the [BooleanUserStyleSetting]. */
+        /**
+         * Represents a true or false option in the [BooleanUserStyleSetting].
+         * @param value The boolean value this instance represents.
+         */
         public class BooleanOption private constructor(
-            /** The boolean value this instance represents. */
             public val value: Boolean
         ) : Option(
             Id(ByteArray(1).apply { this[0] = if (value) 1 else 0 })
@@ -560,8 +564,13 @@
             @get:SuppressWarnings("AutoBoxing")
             public val accessibilityTraversalIndex: Int? = null
         ) {
+            /**
+             * Constructs a [ComplicationSlotOverlay].Builder.
+             *
+             * @param complicationSlotId The id of the [androidx.wear.watchface.ComplicationSlot]
+             * to configure.
+             */
             public class Builder(
-                /** The id of the [androidx.wear.watchface.ComplicationSlot] to configure. */
                 private val complicationSlotId: Int
             ) {
                 private var enabled: Boolean? = null
@@ -1487,8 +1496,8 @@
             )
 
         /**
-         * An application specific custom value. NB the [CustomValueOption.customValue] is the
-         * same as the [CustomValueOption.id].
+         * An application specific custom value. NB the [CustomValueOption.customValue] is the same
+         * as the [CustomValueOption.id].
          */
         public class CustomValueOption : Option {
             /* The [ByteArray] value for this option which is the same as the [id]. */
diff --git a/wear/wear-watchface/src/main/java/androidx/wear/watchface/Renderer.kt b/wear/wear-watchface/src/main/java/androidx/wear/watchface/Renderer.kt
index 083f409..0da2f9f 100644
--- a/wear/wear-watchface/src/main/java/androidx/wear/watchface/Renderer.kt
+++ b/wear/wear-watchface/src/main/java/androidx/wear/watchface/Renderer.kt
@@ -316,9 +316,9 @@
      * @param interactiveDrawModeUpdateDelayMillis The interval in milliseconds between frames in
      * interactive [DrawMode]s. To render at 60hz set to 16. Note when battery is low, the frame
      * rate will be clamped to 10fps. Watch faces are recommended to use lower frame rates if
-     * possible for better battery life. Variable frame rates can also help preserve battery
-     * life, e.g. if a watch face has a short animation once per second it can adjust the frame
-     * rate inorder to sleep when not animating.
+     * possible for better battery life. Variable frame rates can also help preserve battery life,
+     * e.g. if a watch face has a short animation once per second it can adjust the framerate
+     * inorder to sleep when not animating.
      */
     public abstract class CanvasRenderer @WorkerThread constructor(
         surfaceHolder: SurfaceHolder,
diff --git a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFace.kt b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
index 7599696..b6f9261 100644
--- a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
+++ b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFace.kt
@@ -64,7 +64,7 @@
 import kotlin.math.max
 
 // Human reaction time is limited to ~100ms.
-private const val MIN_PERCEPTABLE_DELAY_MILLIS = 100
+private const val MIN_PERCEPTIBLE_DELAY_MILLIS = 100
 
 // Zero is a special value meaning we will accept the system's choice for the
 // display frame rate, which is the default behavior if this function isn't called.
@@ -628,20 +628,17 @@
     }
 
     internal fun invalidateIfNotAnimating() {
-        // Ensure we render a frame if the ComplicationSlot needs rendering, e.g.
-        // because it loaded an image. However if we're animating there's no need
-        // to trigger an extra invalidation.
+        // Ensure we render a frame if the ComplicationSlot needs rendering, e.g. because it loaded
+        // an image. However if we're animating there's no need to trigger an extra invalidation.
         if (!renderer.shouldAnimate() || computeDelayTillNextFrame(
                 nextDrawTimeMillis,
                 systemTimeProvider.getSystemTimeMillis()
-            ) > MIN_PERCEPTABLE_DELAY_MILLIS
+            ) > MIN_PERCEPTIBLE_DELAY_MILLIS
         ) {
             watchFaceHostApi.invalidate()
         }
     }
 
-    internal fun createWFEditorDelegate() = WFEditorDelegate() as WatchFace.EditorDelegate
-
     internal inner class WFEditorDelegate : WatchFace.EditorDelegate {
         override val userStyleSchema: UserStyleSchema
             get() = currentUserStyleRepository.schema
@@ -716,9 +713,8 @@
             (batteryPercent < INITIAL_LOW_BATTERY_THRESHOLD) && !isCharging
     }
 
-    /**
-     * Called by the system in response to remote configuration, on the main thread.
-     */
+    /** Called by the system in response to remote configuration. */
+    @UiThread
     internal fun onSetStyleInternal(style: UserStyle) {
         // No need to echo the userStyle back.
         inOnSetStyle = true
@@ -778,9 +774,8 @@
         }
     }
 
-    /**
-     * Sets the calendar's time in milliseconds adjusted by the mock time controls.
-     */
+    /** Sets the calendar's time in milliseconds adjusted by the mock time controls. */
+    @UiThread
     private fun setCalendarTime(timeMillis: Long) {
         // This adjustment allows time to be sped up or slowed down and to wrap between two
         // instants. This is useful when developing animations that occur infrequently (e.g.
@@ -860,7 +855,7 @@
         // Drop frames if needed (happens when onDraw is slow).
         if (nextFrameTimeMillis <= currentTimeMillis) {
             // Compute the next runtime after currentTimeMillis with the same phase as
-            //  beginFrameTimeMillis to keep the animation smooth.
+            // beginFrameTimeMillis to keep the animation smooth.
             val phaseAdjust =
                 updateRateMillis +
                     ((nextFrameTimeMillis - currentTimeMillis) % updateRateMillis)
diff --git a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
index f25d5ad..4d940fe 100644
--- a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
+++ b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceHostApi.kt
@@ -90,16 +90,16 @@
      * that may be used before your watch face has the permission, use a safe complication data
      * source instead.
      *
-     * A complication data source not satisfying the above conditions may still be set as a default using
-     * this method, but the watch face will receive placeholder data of type
+     * A complication data source not satisfying the above conditions may still be set as a default
+     * using this method, but the watch face will receive placeholder data of type
      * [ComplicationData.TYPE_NO_PERMISSION] until the permission has been granted.
      *
      * @param complicationSlotId The [ComplicationSlot] id.
      * @param dataSources data sources The list of non-system complication data sources to try in
      * order before falling back to
      * fallbackSystemProvider. This list may be null.
-     * @param fallbackSystemProvider The system complication data source to use if none of the complication data sources could be
-     * used.
+     * @param fallbackSystemProvider The system complication data source to use if none of the
+     * complication data sources could be used.
      * @param type The type of complication data that should be provided. Must be one of the types
      * defined in [ComplicationData].
      */
diff --git a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
index 3a5fdff..dde6ffa 100644
--- a/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
+++ b/wear/wear-watchface/src/main/java/androidx/wear/watchface/WatchFaceService.kt
@@ -736,7 +736,7 @@
         internal var pendingUserStyle: UserStyleWireFormat? = null
 
         /**
-         * Whether or not we allow watchfaces to animate. In some tests or for headless
+         * Whether or not we allow watch faces to animate. In some tests or for headless
          * rendering (for remote config) we don't want this.
          */
         internal var allowWatchfaceToAnimate = allowWatchFaceToAnimate()
@@ -911,7 +911,7 @@
                 ambientUpdateWakelock.acquire()
                 // It's unlikely an ambient tick would be sent to a watch face that hasn't loaded
                 // yet. The watch face will render at least once upon loading so we don't need to do
-                // anyhting special here.
+                // anything special here.
                 getWatchFaceImplOrNull()?.renderer?.invalidate()
                 ambientUpdateWakelock.acquire(SURFACE_DRAW_TIMEOUT_MS)
             }
@@ -997,14 +997,6 @@
             }
         }
 
-        internal fun clearComplicationData() {
-            val watchFaceImpl = getWatchFaceImplOrNull()
-            require(watchFaceImpl != null) {
-                "WatchFace must have been created first"
-            }
-            watchFaceImpl.clearComplicationData()
-        }
-
         @UiThread
         internal fun setComplicationDataList(
             complicationDataWireFormats: MutableList<IdAndComplicationDataWireFormat>
@@ -1440,7 +1432,7 @@
                     initStyleAndComplicationsDone.complete(Unit)
 
                     // validateSchemaWireSize is fairly expensive so only perform it for
-                    // interactive watchfaces.
+                    // interactive watch faces.
                     if (!watchState.isHeadless) {
                         validateSchemaWireSize(currentUserStyleRepository.schema)
                     }
@@ -1508,7 +1500,7 @@
                 initStyleAndComplicationsDone.await()
 
                 // Its possible a second getOrCreateInteractiveWatchFaceClient call came in before
-                // the watch face for the first one had finished initalizing, in that case we want
+                // the watch face for the first one had finished initializing, in that case we want
                 // to apply the updated style. NB pendingUserStyle is accessed on the UiThread so
                 // there shouldn't be any problems with race conditions.
                 pendingUserStyle?.let {
